Python 只希望用户';比如';一次评论。我的代码不起作用
我有一个Post模型,上面有一个字段,像_total。我只希望用户能够喜欢一篇文章一次,但是视图中的代码不起作用。代码如下: views.pyPython 只希望用户';比如';一次评论。我的代码不起作用,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我有一个Post模型,上面有一个字段,像_total。我只希望用户能够喜欢一篇文章一次,但是视图中的代码不起作用。代码如下: views.py def like(request, post_id, group_id): group = get_object_or_404(Group, pk= group_id) post = get_object_or_404(Post, pk= post_id) likers = [] if request.method =
def like(request, post_id, group_id):
group = get_object_or_404(Group, pk= group_id)
post = get_object_or_404(Post, pk= post_id)
likers = []
if request.method == 'POST':
if request.user in likers:
return render(request, 'groups/detail.html', {'group':group, 'error': "you have already liked this post"} )
else:
post.likes_total += 1
post.save()
likers.append(request.user)
return redirect('/groups/' + str(group_id) )
# post.save()
else:
return render(request, 'groups/detail.html', {'group':group})
这个代码对我来说似乎是对的,我不知道问题出在哪里。。任何帮助都将不胜感激 每次调用函数时,都会将likers设置为空。相反,它应该是帖子的一个属性 您的
likers
列表不会在任何地方持久化,并且它总是初始化为空列表,因此请求。user
将永远不会在列表中
您应该编辑模型,使每个
Post
对象都有一个喜欢它的用户列表,然后您可以保存、更新和检查该列表,以确保每个用户最多只喜欢一次每个Post。您可以在like
函数中定义一个名为likers
的列表。这意味着每次有人调用like
函数时,您都会构造一个新的空列表
您可以在函数外部构造列表,但这也没有帮助。事实上,您可以考虑持久性的唯一数据(可以插入/修改/删除的数据,以便下一次调用可以看到这种差异)在数据库中。
因此,您应该让数据库存储喜欢帖子的人,例如,向引用喜欢帖子的用户的post
模型添加ManyToManyField
。因此,您应该编辑模型:
class Post(Model):
likers = ManyToManyField(User)
# some other fields
likes_total = IntegerField()
班级职位(模型):
likers=ManyToManyField(用户)
#其他一些领域
likes\u total=IntegerField()
现在我们可以将喜欢帖子的用户添加到多对多关系中:
def like(request, post_id, group_id):
group = get_object_or_404(Group, pk= group_id)
post = get_object_or_404(Post, pk= post_id)
if request.method == 'POST':
if request.user in post.likers.all():
return render(request, 'groups/detail.html', {'group':group, 'error': "you have already liked this post"} )
else:
post.likes_total += 1
post.likers.add(request.user)
post.save()
return redirect('/groups/' + str(group_id) )
else:
return render(request, 'groups/detail.html', {'group':group})
def-like(请求、发布id、组id):
组=获取对象或404(组,主键=组id)
post=获取对象或404(post,pk=post\U id)
如果request.method==“POST”:
如果post.likers.all()中的request.user:
返回呈现(请求'groups/detail.html',{'group':组,'error':“您已经喜欢这篇文章了”})
其他:
post.u总计+=1
post.likers.add(request.user)
post.save()
返回重定向('/groups/'+str(group_id))
其他:
返回呈现(请求'groups/detail.html',{'group':group})
您可以做的另一个改进是使用
reverse
生成URL,而不是自己构建URL。但这里使用的是本地列表。您知道数据库是Web服务器中唯一的持久数据吗?