Попытка преобразовать представление на основе функций в общее детальное представление
Создаю систему комментариев для проекта 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
в представление на основе класса, а вы должны, потому что это требуется вашей моделью.