python - 如果用户已经喜欢了一个帖子,Django 不允许另一个喜欢
问题描述
我想让用户只能喜欢一次帖子。到目前为止,这是我的代码:
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
likes = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
在views.py中:
def LikePostView(request, pk):
post = get_object_or_404(Post, pk=pk)
post.likes = post.likes+1
post.save()
return render(request, 'blog/like_done.html')
在前端喜欢帖子的代码:
<p class="content">{{ post.likes }} likes</p>
{% if user.is_authenticated %}
<a href='{% url "like_post" post.id %}'><i class="fa fa-thumbs-up" style="font-size:36px"></i></a>
{% else %}
<a onclick="alert('In order to like a post, you must be logged in!')" href='{% url "blog-home" %}'><i class="fa fa-thumbs-up" style="font-size:36px"></i></a>
{% endif %}
和like_done.html:
{% extends "blog/base.html" %}
{% block content %}
<h2 class="alert alert-success">Post Liked Successfuly!</h2>
<br>
<a class="btn btn-success" href="{% url 'blog-home' %}">Go Back Home?</a>
<br>
{% endblock content %}
所以有了这一切,我如何让用户只被允许喜欢一次帖子。我只是初学者,所以请解释一下。
解决方案
如果我的问题是正确的,您希望用户能够喜欢一次帖子,并且当用户第二次点击喜欢按钮时,它应该“不喜欢”,对吗?
如果是这样,这就是你应该做的:
在你的 Post 模型中,like 应该是这样likes = models.ManyToManyField(User, related_name='user_likes')
的,a ManyToManyField
。
那么在你看来:
def LikePostView(request, pk):
post = get_object_or_404(Post, pk=pk)
if request.user in post.likes.all():
post.likes.remove(request.user)
else:
post.likes.add(request.user)
return render(request, 'blog/like_done.html')
这样,如果用户单击赞按钮,他将被添加到likes Field
,如果他再次单击它,他将被删除,似乎他已经在那里。因此,用户将无法多次喜欢帖子。
推荐阅读
- jquery - 将 jQuery 添加到 Rails 的问题
- android - 在任何根目录中都找不到入口文件 index.js
- dart - AngularDart将切换事件从一个组件传递到另一个组件
- javascript - 如何创建一个使用字符串作为 X 轴和 Y 轴的图表?
- python - Selenium 找不到元素,使用 xpath 的搜索按钮
- haskell - Haskell:获取Snoc列表中的第N个元素
- php - php前端控制器出现错误
- php - 上市没问题,但所有其他功能都不起作用
- reactjs - 尝试访问 event.target.$something 时总是返回“未定义”
- wordpress - 如果帖子包含特定的明确词语,如何删除?