Django Twitter克隆版。如何限制用户喜欢一条微博不止一次?

2024-04-28 13:58:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道从哪里开始。现在,用户可以按喜欢的次数,他们想要的,它只是加起来,总喜欢的推特。你知道吗

你知道吗型号.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 

你知道吗视图.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克隆版。如何限制用户喜欢一条微博不止一次?你知道吗


Tags: instance用户pyselfformdefaultreturnmodels
3条回答

除了跟踪一篇文章有多少个Likes外,您可能还想跟踪谁“喜欢”了每一篇文章。您可以通过在UserHowl上创建具有唯一键的联接表Likes来解决这两个问题。你知道吗

唯一键将防止任何User进行重复喜欢。你知道吗

您可以在Django中使用^{}来实现这一点,请注意,由于这意味着向Howl添加第二个User关系,因此我们需要通过提供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()。你知道吗

这样做的另一个好处是,它允许您在添加Like-eg时存储有关它的信息。你知道吗

改变了我的生活型号.py至

liked_by = models.ManyToManyField(User, related_name="likes")

你知道吗视图.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')

你知道吗索引.html你知道吗

{{howl.liked_by.count}}

一个想法是在表中添加一个名为likers的列,然后在像\u counts这样递增之前检查模特。喜欢的人是否包含新的liker。如果不增加喜欢,如果是不

相关问题 更多 >