喜欢 Django 中的功能

Like functionality in Django

我正在开发一个社交平台,目前正在为用户 post 编写类似的功能。但是,我似乎无法让它发挥作用。这些是我的 Models.py:

class Post(models.Model):
    user = models.ForeignKey(User)
    posted = models.DateTimeField(auto_now_add=True)
    content = models.CharField(max_length=150)
    picturefile = models.ImageField(upload_to="post_content", blank=True)

class Like(models.Model):
    user = models.ForeignKey(User, null=True)
    post = models.ForeignKey(Post, null=True)

我通过我的 url 作为 'post_id' 传递 post ID,然后在我看来:

def liking(request, post_id):
    newlike = Like.objects.create()
    newlike.post = post_id
    newlike.user = request.user
    newlike.save()
    return redirect(reverse('dashboard'))

然而,它returns出现以下错误:

Cannot assign "'47'": "Like.post" must be a "Post" instance.

有谁知道我遗漏了什么或做错了什么?

您正在传递 newlike.post 一个数字(整数字段),而它需要一个 Post 实例。

这部灵魂作品:

from django.http.shortcuts import get_object_or_404

def liking(request, post_id):
    post = get_object_or_404(Post, id=post_id)
    newlike = Like.objects.create(user=request.user, post=post)
    return redirect(reverse('dashboard'))

注意 1:最好使用方便的快捷方式 get_object_or_404,以便在特定 Post 不存在时引发 404 错误。 注2:通过调用objects.create会自动保存到db和return一个实例!

newlike.post 应该是一个 Post 对象,而不是一个整数。

你需要先通过id找到post:

post = Post.objects.get(pk=post_id)
newlike.post = post

或者,如果您不想执行此查找:

newlike.post_id = post_id