РЕДАКТИРОВАТЬ: нашел решение сам!
Это то, что я сделал.Я почти уверен, что это не лучшая практика, но она сработала для меня.
class CommentCreateView(CreateView):
def get(self, request, *args, **kwargs):
context = {'form': CommentForm()}
return render(request, 'news/add_comment_to_article.html', context)
def post(self, request, *args, **kwargs):
form = CommentForm(request.POST)
if form.is_valid():
article = get_object_or_404(Article, pk=kwargs.get('pk'))
print(article)
comment = form.save(commit=False)
comment.post = article
comment.save()
return HttpResponseRedirect(reverse('news:article', kwargs={'article_id': article.pk}))
У меня есть вопрос, после преобразования моего представления (включенного ниже) из представления на основе функций в представление на основе классов я получаю сообщение об ошибке (страница не найдена - 404) после попытки отправить комментарий кстатья.Почему это так?
представление сейчас:
class CommentCreateView(RedirectView):
model = Comment
form_class = CommentForm
template_name = 'news/add_comment_to_article.html'
def form_valid(self, *args, **kwargs):
article = get_object_or_404(Article, pk=kwargs.get('pk'))
comment = form.save(commit=False)
comment.post = article
comment.save()
return HttpResponseRedirect(reverse('news:article', kwargs={'article_id': article.pk}))
то же представление, что и раньше, функция основана (работает):
def add_comment_to_article(request, pk):
article = get_object_or_404(Article, pk=pk)
if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = article
comment.save()
return HttpResponseRedirect(reverse('news:article', kwargs={"article_id": article.pk}))
else:
form = CommentForm()
return render(request, 'news/add_comment_to_article.html', {'form': form})
форма комментария:
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('author', 'text',)