如何解决值错误无法分配查询集它必须是一个实例
我想在我的评论模型中创建对象。 这是我对帖子的回复模型。
class Reply(MPTTModel):
post = models.ForeignKey(Post,on_delete=models.CASCADE)
detail = models.CharField(max_length=50,null=True,blank=True,unique=True)
pub_date = models.DateTimeField(auto_now_add=True)
last_edited = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User,on_delete=models.CASCADE)
class MPTTMeta:
order_insertion_by = ['name']
这是我的回复视图功能。
def post_detail(request,id,**kwargs):
post = Post.objects.all().filter(id=id)
comment = CommentReply.objects.filter(post=id)
context = {'post': post,'comment': comment}
if request.method == 'POST':
comments = request.POST.get('comment')
Reply.objects.create(
post=post,detail=comments,author = request.user)
else:
return render(request,'khalidblog_app/full_detail.html',context)
return render(request,context)
我在模板中使用 for 循环:
{% for post in post %}
<img alt='' src='{{ post.image.url }}' class='avatar avatar-80 photo' height='80' width='80' />
<div class="eltd-author-description-text-holder">
<h5 class="eltd-author-name"> {{post.author}} </h5>
<div class="eltd-author-text">
<p>{{post.title}}</p>
</div>
<div class="eltd-author-text">
<p>{{post.content}}</p>
<hr>
</div>
{%endfor%}
当我运行这个视图函数时,它显示如下值错误。
Cannot assign "<QuerySet [<Post: Author : zorainTiTleFirst PostDated :2021-01-17 16:27:47.043869+00:00>]>": "Reply.post" must be a "Post" instance.
如何使用此视图函数在此回复模型中设置 forignkey(Post)?
解决方法
您的“post”变量指向 Post 对象的 QuerySet,而不是单个实例。您应该使用 get() 而不是 filter() 如下:
post = Post.objects.get(id=id)
更新:您在评论中分享了您在模板中使用了 for 循环。 for 循环旨在迭代一组对象(例如,将使用 filter() 返回的 QuerySet)。如果只想渲染单个实例的字段值,则不需要使用 for 循环。
Here 是 Django 文档的链接,用于 filter() - 它返回一个 QuerySet(对象组)。
Here 是 Django 文档的链接,用于 get() - 返回单个对象。
,在函数的第一行,您使用了 .filter() 方法,该方法返回 QuerySet(简称为 List of Objects),您应该在理想情况下使用 .get() 方法。 .get() 返回第 6 行的赋值实际期望的单个对象。
,由于您的“post”变量指向 Post 对象的 QuerySet,您可以直接选择 QuerySet 中的第一个元素,如下所示:
Reply.objects.create(
post=post[0],detail=comments,author = request.user)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。