为什么引发ValueError异常?

2024-09-24 06:32:24 发布

您现在位置:Python中文网/ 问答频道 /正文

型号.py

class Post(models.Model):
    message = models.CharField(max_length=2000)
    topic = models.ForeignKey(Topic, related_name="posts", null=True, 
               blank=True, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User, null=True, blank=True, 
                    on_delete=models.CASCADE)
    like = models.IntegerField(default=0)
    views = models.IntegerField(default=0)

class ReplyPost(models.Model):
    reply = models.CharField(max_length=2000)
    post = models.ForeignKey(Post, related_name="reply", null=True, 
            blank=True, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User, null=True, blank=True, 
                    on_delete=models.CASCADE)

视图.py

def reply_post(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == "POST":
        form = ReplyPostForm(request.POST)

        if form.is_valid():
            replypost = form.save(commit = False)
            replypost.reply = form.cleaned_data.get("reply")
            replypost.post = post
            replypost.created_by = request.user
            replypost.save()
            return redirect("post", post.id)

    else:
        form = ReplyPostForm()
        args = {
            'form': form,
            'post':post
         }
        return render(request, 'home/replypost.html', args)

网址.py

urlpatterns = [
   #.....

   url(r'^home/questions/(?P<pk>\d+)/reply/$', views.reply_post, 
         name="replypost"),
   url(r'^home/questions/(?P<pk>\d+)/$', views.post, name="post"),
]

表单.py

class ReplyPostForm(ModelForm):
    reply = forms.CharField(widget = forms.Textarea)

    class Meta:
        model = ReplyPost
        fields = ('reply',)

错误:

ValueError. The view 'WebBoard.views.reply_post' didn't return an
  'HttpResponse' object. It returned 'None' instead.

我不能理解代码有什么问题。如果上面的代码不足以理解,请更新我。你知道吗


Tags: namepyformtruemodelsrequestreplypost
1条回答
网友
1楼 · 发布于 2024-09-24 06:32:24

当请求是POST但表单无效时,代码需要返回一个HttpResponse实例。你知道吗

查看您的代码,尝试将最后一行向后移动一个缩进级别;这样,所有不是有效形式的POST都将落入最后一个return语句中。你知道吗

def reply_post(request, pk):
    post = ...

    if request.method == "POST":
        form = ReplyPostForm(request.POST)

        if form.is_valid():
            ...
            return redirect("post", post.id)
    else:
        form = ReplyPostForm()

    args = {
        'form': form,
        'post': post,
    }
    return render(request, 'home/replypost.html', args)

相关问题 更多 >