python - 创建 Django 评论表单时出现 ValueError

标签 python django

我在使用 django 创建评论表单时遇到问题。在我写完 view.py、models.py 和 html 后,我收到一个 ValueError ,内容如下:

Cannot assign "<class 'blog.models.post'>": "Comment.post" must be a "post" instance". 

下面是我的代码。

HTML

{% block content %}
<h1>Add New Comment:</h1>
<form method='POST' action=''>
    {% csrf_token %}
    {{ form.as_p }}
<button type='submit'>Submit</button>
</form>
{% endblock %}

View .py

def add_comment(request, slug):
    po = get_object_or_404(post, slug=slug)
    if request.method == 'POST':
        form = CommentForm(request.POST or None)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.save()
            return redirect('blog:post', slug=post.slug)
    else:
        form = CommentForm()
    return render(request, 'blog/post/add_comment.html', {'form': form})

模型.py

class Comment(models.Model):
    post = models.ForeignKey(post, related_name='comments', on_delete=models.CASCADE)
    user = models.CharField(max_length=250)
    email = models.EmailField() 
    body = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    approved = models.BooleanField(default=False) 

    def approved(self):
        self.approved = True
        self.save()

    def __str__(self):
        return self.user

最佳答案

您从数据库中获取的帖子是po:

po = get_object_or_404(post, slug=slug)

因此您应该设置form.post = po:

def add_comment(request, slug):
    po = get_object_or_404(post, slug=slug)
    if request.method == 'POST':
        form = CommentForm(request.POST or None)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = po
            comment.save()

请注意,通常在 Django 中,您将使用 Post 作为模型,使用 post 作为从数据库获取的实例。

关于python - 创建 Django 评论表单时出现 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55241153/

相关文章:

python - JAX:为什么不使用 @jit 产生 -inf 值但使用它却没有?

python - 在 Stan 模型中将概率乘以常数

javascript - 将变量从javascript传递到服务器(django)

python - 如何返回 .fetchone() 返回的元组中的单个元素?

python - 从 IntegrityError 异常中获取 key

javascript - 使用 Python 加密并使用 jQuery/Javascript 解密?

django - 按距离查询注释以在 Django 1.11 中使用 postgis 查找最近的距离似乎不正确

django - 是否可以使用 Django 和 Node.Js?

python - 如何跟随 Django 中的按钮单击?

Django,选择选项字段