IntegrityError at /tickets/1/comments/new/ NOT NULL constraint failed: comments_comment.ticket_id

Getting an integrity error when creating a separate comments app for my ticket project. Not sure why, I have already assigned the logged in user as author in the get_absolute_url method on my Comment object and so now I’m not sure on how to proceed. Any help is much appreciated

Here is my comment model

models.py

class Comment(models.Model):
    ticket = models.ForeignKey(Ticket, related_name='comments', on_delete=models.CASCADE)
    title = models.CharField(max_length=20)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    
    def __str__(self):
        return self.title
    
    def get_absolute_url(self):
        return reverse('tickets: ticket-detail', kwargs={'pk': self.ticket_id})

Here is my views.py

class CommentCreateView(LoginRequiredMixin, CreateView):
    redirect_field_name = 'tickets/ticket_detail.html'
    model = Comment
    fields = ['title', 'content']

    def form_valid(self, form):
        form.instance.post_id = self.kwargs['pk']
        form.instance.author = self.request.user
        return super().form_valid(form)

Traceback

Django Version: 4.0.1
Python Version: 3.10.0
Installed Applications:
['tickets.apps.TicketsConfig',
 'users.apps.UsersConfig',
 'comments.apps.CommentsConfig',
 'crispy_forms',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\backends\sqlite3\base.py", line 416, in execute
    return Database.Cursor.execute(self, query, params)

The above exception (NOT NULL constraint failed: comments_comment.ticket_id) was the direct cause of the following exception:
  File "C:\Users\mikha\bug_env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\views\generic\base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\contrib\auth\mixins.py", line 71, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\views\generic\base.py", line 101, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\views\generic\edit.py", line 174, in post
    return super().post(request, *args, **kwargs)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\views\generic\edit.py", line 144, in post
    return self.form_valid(form)
  File "C:\Users\mikha\issuetracker\comments\views.py", line 38, in form_valid
    return super().form_valid(form)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\views\generic\edit.py", line 127, in form_valid
    self.object = form.save()
  File "C:\Users\mikha\bug_env\lib\site-packages\django\forms\models.py", line 466, in save
    self.instance.save()
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\models\base.py", line 743, in save
    self.save_base(using=using, force_insert=force_insert,
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\models\base.py", line 780, in save_base
    updated = self._save_table(
  File "C:\Users\mikha\bug_env\lib\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 "C:\Users\mikha\bug_env\lib\site-packages\django\db\models\base.py", line 923, in _do_insert
    return manager._insert(
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\models\query.py", line 1301, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\models\sql\compiler.py", line 1441, in execute_sql
    cursor.execute(sql, params)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\backends\utils.py", line 99, in execute
    return super().execute(sql, params)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\backends\utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\backends\utils.py", line 80, in _execute
    with self.db.wrap_database_errors:
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\db\backends\sqlite3\base.py", line 416, in execute
    return Database.Cursor.execute(self, query, params)

Exception Type: IntegrityError at /tickets/1/comments/new/
Exception Value: NOT NULL constraint failed: comments_comment.ticket_id

Look at your error message:

Where is the value for the ticket field in your new Comment model supposed to be coming from?

From my Ticket Model? So is the issue coming from my urls.py file for the Comments app?

No.

You’re trying to create an instance of Comment.

Comment has these five fields:

Your form has defined form fields for title and content.

Your form_valid method is setting author.

Your date_posted field has a default.

This accounts for four of the five fields.

You are not setting the ticket field - therefore, it’s null. However, the model field is not defined with null=True, therefore, you’re getting this error.