Reputation: 19
I'm trying to save an object using cbv's im new to using it, and I'm trying to save an object using create view but is getting this error:
"NOT NULL constraint failed: forum_question.user_id"
I would appreciate beginner friendly explanation on how to fix this and maybe tips as well, thank you!
models.py:
class Question(VoteModel, models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=30)
detail = models.TextField()
tags = models.TextField(default='')
add_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
forms.py:
class QuestionForm(ModelForm):
class Meta:
model = Question
fields = ['title', 'detail', 'tags']
views.py:
class AskForm(CreateView):
def post(self):
user = self.request.user
model = Question
form_class = QuestionForm
template_name = 'forum/ask-question.html'
if form_class.is_valid():
form_class.save()
exceptions?:
edit 3:
extra info:
Traceback (most recent call last): File "/home/titanium/.local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/home/titanium/.local/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/base.py", line 69, in view return self.dispatch(request, *args, **kwargs) File "/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/base.py", line 101, in dispatch return handler(request, *args, **kwargs) File "/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/edit.py", line 174, in post return super().post(request, *args, **kwargs) File "/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/edit.py", line 144, in post return self.form_valid(form) File "/home/titanium/.local/lib/python3.8/site-packages/django/views/generic/edit.py", line 127, in form_valid self.object = form.save() File "/home/titanium/.local/lib/python3.8/site-packages/django/forms/models.py", line 466, in save self.instance.save() File "/home/titanium/.local/lib/python3.8/site-packages/vote/models.py", line 67, in save super(VoteModel, self).save(*args, **kwargs) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/models/base.py", line 743, in save self.save_base(using=using, force_insert=force_insert, File "/home/titanium/.local/lib/python3.8/site-packages/django/db/models/base.py", line 780, in save_base updated = self._save_table( File "/home/titanium/.local/lib/python3.8/site-packages/django/db/models/base.py", line 885, in _save_table results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/models/base.py", line 923, in _do_insert return manager._insert( File "/home/titanium/.local/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/models/query.py", line 1301, in _insert return query.get_compiler(using=using).execute_sql(returning_fields) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1441, in execute_sql cursor.execute(sql, params) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py", line 99, in execute return super().execute(sql, params) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers return executor(sql, params, many, context) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/utils.py", line 90, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) File "/home/titanium/.local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 416, in execute return Database.Cursor.execute(self, query, params) django.db.utils.IntegrityError: NOT NULL constraint failed: forum_question.user_id [14/Apr/2022 09:58:02] "POST /ask/ HTTP/1.1" 500 175023
Upvotes: 0
Views: 4591
Reputation: 11
I'm not sure if this is still useful, however, I ran into the same error. You can fix the error by deleting your migration files and the database. The error is due to the sending of NULL data(no data) to an already existing field in the database, usually after that field have been modified or deleted.
Upvotes: 0
Reputation: 732
A forum question instance must have a non null user field, but you are not specifying the user related to the object you're creating. In the case you dont want to add the user, update your model's user field to be:
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)
or in your ask form you overload form_valid() in order to add the user sort of like this (Note I have not tested this directly, follow the documentation here):
class AskForm(CreateView):
def post(self):
user = self.request.user
model = Question
form_class = QuestionForm
template_name = 'forum/ask-question.html'
if form_class.is_valid():
form_class.save()
def form_valid(self, form):
form.instance.created_by = self.request.user
return super().form_valid(form)
Upvotes: 1