Creating a separate comments app for a django ticket app.

Trying to create a separate comments app using class-based views for a ticket project. I think the problem lies in my
comments’ models.py or its urls.py file but I dont know how to proceed. Here is the error that I get and the code and traceback.

Traceback

Installed Applications:
['tickets.apps.TicketsConfig',
 'users.apps.UsersConfig',
 'comments.apps.CommentsConfig',
 'demo.apps.DemoConfig',
 '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\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 41, in form_valid
    return super().form_valid(form)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\views\generic\edit.py", line 128, in form_valid
    return super().form_valid(form)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\views\generic\edit.py", line 59, in form_valid
    return HttpResponseRedirect(self.get_success_url())
  File "C:\Users\mikha\bug_env\lib\site-packages\django\views\generic\edit.py", line 118, in get_success_url
    url = self.object.get_absolute_url()
  File "C:\Users\mikha\issuetracker\comments\models.py", line 21, in get_absolute_url
    return reverse('tickets:ticket-detail', kwargs={'pk': self.ticket_id})
  File "C:\Users\mikha\bug_env\lib\site-packages\django\urls\base.py", line 86, in reverse
    return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
  File "C:\Users\mikha\bug_env\lib\site-packages\django\urls\resolvers.py", line 729, in _reverse_with_prefix
    raise NoReverseMatch(msg)

Exception Type: NoReverseMatch at /tickets/2/comments/new/
Exception Value: Reverse for 'ticket-detail' with keyword arguments '{'pk': None}' not found. 1 pattern(s) tried: ['tickets/(?P<pk>[0-9]+)/\\Z']

comments models.py

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

comments urls.py

urlpatterns = [
    path('tickets/<int:pk>/', CommentListView.as_view(), name='ticket-detail'),
    path('tickets/<int:pk>/comments/new/', CommentCreateView.as_view(), name='comment-create'),
    path('tickets/comments/<int:pk>/update/', CommentUpdateView.as_view(), name='comment-update'),
    path('tickets/comments/<int:pk>/delete/', CommentDeleteView.as_view(), name='comment-delete'),
]

ticket models.py

class Ticket(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    assignee = models.ForeignKey(Profile, on_delete=models.SET_NULL, blank=True, null=True)
    status = models.BooleanField(choices=MARKED, default=True)
    priority = models.TextField(choices=PRIORITIES, default='None', max_length=10)
    label = models.CharField(choices=TYPES, default='Misc', max_length=100)
    
    
    def __str__(self):
        return self.title
    
    def get_absolute_url(self):
        return reverse('ticket-detail', kwargs={'pk': self.pk})
    

In your model you have:

This means that the ticket field can be null.

However, your path definition for the ticket-detail url:

requires that the pk field have a value.

When your get_absolute_url function gets called and the ticket field is null, you’ll get this error.

Check your database to ensure that your comment with id = 2 has a proper reference in the ticket field.