我不知道从哪里开始。现在,用户可以按他们想要的次数按下,并且只会将该推文的总喜欢加起来。
models.py
class Howl(models.Model):
author = models.ForeignKey(User, null=True)
content = models.CharField(max_length=150)
published_date = models.DateTimeField(default=timezone.now)
like_count = models.IntegerField(default=0)
rehowl_count = models.IntegerField(default=0)
def get_absolute_url(self):
return reverse('howl:index')
def __str__(self):
return self.content
views.py
class HowlLike(UpdateView):
model = Howl
fields = []
def form_valid(self, form):
instance = form.save(commit=False)
instance.like_count += 1
instance.save()
return redirect('howl:index')
Django Twitter克隆。如何限制用户不止一次喜欢推文?
答案 0 :(得分:1)
除了跟踪帖子中有Likes
个帖子的数量之外,您还可能还希望跟踪谁拥有"喜欢"每个帖子。您可以通过在Likes
和User
上创建一个包含唯一键的加入表Howl
来解决这两个问题。
唯一键会阻止任何User
做出重复的喜欢。
您可以使用ManyToManyField
在Django中执行此操作,请注意,由于这意味着向User
添加第二个Howl
关系,因此我们需要通过提供{{1}来消除关系歧义}}
例如:
related_name
class Howl(models.Model):
author = models.ForeignKey(User, null=True, related_name='howls_authored')
liked_by = models.ManyToManyField(User, through='Like')
# ...rest of class as above
class Like(models.Model):
user = models.ForeignKey(User)
howl = models.ForeignKey(Howl)
class Meta:
unique_together = (('user', 'howl'))
计数会变得多余,因为您可以改为使用like_count
。
这样做的另一个好处是它允许您存储有关Howl.liked_by.count()
的信息 - 例如,当它被添加时。
答案 1 :(得分:0)
一个想法可能是在名为likers
的表中添加一列,然后在增加like_counts之前检查models.likers是否包含新的liker。如果没有增加喜欢,如果是,请不要。
答案 2 :(得分:0)
将models.py中的likes_count更改为
liked_by = models.ManyToManyField(User, related_name="likes")
views.py
class HowlLike(UpdateView):
model = Howl
fields = []
def form_valid(self, form):
instance = form.save(commit=False)
instance.liked_by.add(self.request.user)
instance.like_count = instance.liked_by.count()
instance.save()
return redirect('howl:index')
的index.html
{{howl.liked_by.count}}