我正在开发一个社交平台,目前正在为用户帖子编写类似的功能。但是,我似乎无法使其发挥作用。这些是我的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)
我将帖子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'))
但是,它会返回以下错误:
Cannot assign "'47'": "Like.post" must be a "Post" instance.
有谁知道我错过了什么或做错了什么?
答案 0 :(得分:2)
您正在传递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
,以便在特定帖子不存在时引发404错误。
注2:通过调用objects.create
将自动保存到数据库并返回实例!
答案 1 :(得分:1)
newlike.post应该是Post对象,而不是int。
您需要先找到id的帖子:
post = Post.objects.get(pk=post_id)
newlike.post = post
或者,如果您不想执行此查找:
newlike.post_id = post_id