喜欢 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
我正在开发一个社交平台,目前正在为用户 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