Django ValueError 'не вернул объект HttpResponse' - PullRequest
1 голос
/ 06 августа 2020

Я только начал изучать Python и Django. Я пытался создать простой веб-сайт для блога и столкнулся с этой ошибкой при обновлении сообщения. Django выдает эту ошибку, когда я пытаюсь обновить сообщение. Все остальное, похоже, работает нормально, и я могу обновить сообщение от администратора.

Ошибка: ValueError в / post / 4 / Просмотр posts.views.PostDetailView не вернул объект HttpResponse. Вместо этого он вернул None.

Вот мой код для UpdateViews.py

class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Post
form_class = PostForm

def form_valid(self,form):
    form.instance.author = self.request.user
    return super().form_valid(form)

def test_func(self):
    post=self.get_object()
    if self.request.user == post.Author:
        return True
    return False

Вот мой код для DetailView:

class PostDetailView(DetailView):
model = Post
template_name = 'posts/post.html'
context_object_name = 'obj'
form = CommentForm

def get_object(self):
    obj = super().get_object()
    if self.request.user.is_authenticated:
        PostView.objects.get_or_create(user=self.request.user,post=obj)
    return obj

def get_context_data(self, *args, **kwargs):
    CatCount = Category_Count()
    context = super().get_context_data(*args, **kwargs)
    context['latest'] = Post.objects.order_by('-date_added')[0:3]
    context['Category_Count'] = CatCount
    context['form'] = self.form
    return context

def post(self, request, *args, **kwargs):
    form = CommentForm(request.POST)
    if form.is_valid():
        post = self.get_object()
        form.instance.Author = request.user
        form.instance.post = post
        form.save()
        return redirect(reverse("post", kwargs={
        'pk': post.pk
        }))

Понятия не имею, почему он возвращает мне эту ошибку, поэтому любое решение будет оценено. Заранее благодарю

1 Ответ

0 голосов
/ 06 августа 2020

Вы ничего не возвращаете, если форма недействительна. Вы можете снова отобразить шаблон с помощью формы, содержащей ошибки:

class PostDetailView(DetailView):
    model = Post
    template_name = 'posts/post.html'
    context_object_name = 'obj'
    form = CommentForm

    # …

    def post(self, request, *args, **kwargs):
        form = CommentForm(request.POST)
        if form.is_valid():
            post = self.get_object()
            form.instance.Author = request.user
            form.instance.post = post
            form.save()
            return redirect('post', pk=post.pk)
        self.object = self.get_object()
        context = self.get_context_data(object=self.object)
        return <b>self.render_to_response(context)</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...