【发布时间】:2019-02-16 12:59:31
【问题描述】:
这是我为练习而创建的项目,在我的 models.py 中,
class Post(models.Model):
title = models.CharField(max_length = 140)
author = models.ForeignKey(User, on_delete=models.CASCADE)
votes = models.BigIntegerField(default=0, blank=True)
class Vote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='voter')
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='vpost')
@receiver(post_save, sender=Vote)
def update_votes(sender, **kwargs):
# # ??
在这里,我有一个 Voteform,该用户可以对任何特定帖子进行投票。那部分效果很好。
这是我的问题,每当用户投票特定帖子时,我希望帖子模型中的投票字段也增加。
我知道我可以在我的 html 中用 {{post.vpost.count}} 显示它。但我想要这里的增量。
我尝试过的其他方法,
class Vote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='voter')
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='vpost')
def update_votes(self):
p = self.post
p.votes += 1
p.save()
这个只工作一次,第二次就不行了,所以我想使用信号方法。那么如何使用信号更新 Post 模型中的投票字段呢?
【问题讨论】:
-
当您可以通过简单的
post.vote_set.count()调用获得它时,我不认为这是您想要存储在单独字段中的内容,而无需麻烦地保持计数最新。这样做的唯一原因是由于添加了查询,性能明显不足。是这样吗? -
我知道这一点,问题中也提到过。这是我为学习而练习的一种情况。
标签: django django-models django-signals