Попытка преобразовать представление на основе функций в общее детальное представление

Создаю систему комментариев для проекта ticket django. Я завершил большую часть функциональности для комментариев, за исключением того, что я не совсем уверен, как реализовать метод POST, чтобы я мог использовать фронтенд для создания комментариев. Если я использую администратора сайта, он работает и отображается в представлении, но я получаю ошибку при попытке отправки с помощью формы на фронтенде. Я не уверен, как действовать дальше, любая помощь будет очень признательна.

Traceback

Вот исходный вид, основанный на функциях

def ticket_single(request, post):

    ticket = get_object_or_404(Ticket, slug=ticket, status='published')

    allcomments = ticket.comments.filter(status=True)
    
    user_comment = None

    if request.method == 'POST':
        comment_form = NewCommentForm(request.POST)
        if comment_form.is_valid():
            user_comment = comment_form.save(commit=False)
            user_comment.ticket = ticket
            user_comment.save()
            return HttpResponseRedirect('/' + ticket.slug)
    else:
        comment_form = NewCommentForm()
    return render(request, 'ticket_detail.html', {'ticket': ticket, 'comments':  user_comment, 'comments': comments, 'comment_form': comment_form, 'allcomments': allcomments, })

Вот что у меня есть на данный момент в DetailView

class TicketDetailView(DetailView):
    model = Ticket

    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['comments'] = Comment.objects.filter(ticket=self.object)
        context['comment_form'] = NewCommentForm()
        return context
    
    def post(self, request, *args, **kwargs):
        if request.method == 'POST':
            comment_form = NewCommentForm(request.POST)
            if comment_form.is_valid():
                user_comment = comment_form.save(commit=False)
                user_comment.save()
                return render(request, 'ticket_detail.html', {'comments': user_comment, 'comment_form': comment_form})
            

Посмотрите на эту ошибку:

(NOT NULL constraint failed: tickets_comment.ticket_id ...)

Это означает, что вы пытаетесь создать объект Comment (из приложения tickets), но не предоставили ticket или ticket_id. Вы не включили user_comment.ticket = ticket в представление на основе класса, а вы должны, потому что это требуется вашей моделью.

Вернуться на верх