Django:不能分配"你''":" Likes.post"必须是" Post"例

时间:2016-05-24 10:10:19

标签: python django

我有一个名为Likes的模型: 型号:喜欢:

class Likes(models.Model):
    def __str__(self):
        return post

    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    user_id = models.ForeignKey(User,on_delete=models.CASCADE)

查看赞:

def like(request,post_id = None):
    like = Likes.objects.create(post=post_id,user_id=request.session['user_id'])

    try:
        like.save()
    except like.DoesNotExist:
        cannot = "true"
        return HttpResponse(json.dumps(cannot),content_type="application/json")
    cannot = "false"
    return HttpResponse(json.dumps(cannot),content_type="application/json")

我的 html 是:

like

当我点击时,我收到此错误

Cannot assign "u'1'": "Likes.post" must be a "Post" instance.

我是django的新手。请帮我解决这个错误。或者我对协会做错了吗?

1 个答案:

答案 0 :(得分:4)

如错误所示,您应该将Post个实例分配到post字段,但是您要尝试分配ID '1'

您可以先从数据库中获取post

from django.shortcuts import get_object_or_404

post = get_object_or_404(Post, id=post_id)
Likes.objects.create(post=post, user_id=request.session['user_id'])

或者您可以直接将ID分配给post_id

Likes.objects.create(post_id=post_id, user_id=request.session['user_id'])

获取帖子可能更好,因为它会检查post_id是否指向有效帖子。如果找不到具有该ID的帖子,get_object_or_404快捷方式将返回404错误页面。

顺便说一句,如果您使用Django的身份验证,从request.user获取用户会更容易:

Likes.objects.create(post=post, user=request.user)