Джанго непонятно 404 - PullRequest
       117

Джанго непонятно 404

0 голосов
/ 29 сентября 2019

РЕДАКТИРОВАТЬ: нашел решение сам!

Это то, что я сделал.Я почти уверен, что это не лучшая практика, но она сработала для меня.

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',)

1 Ответ

0 голосов
/ 29 сентября 2019

Используйте FormView вместо RedirectView .(Мы видим, что RedirectView не имеет form_valid метода.)

Подробнее о FormView см. В Официальная документация Django .

...