Django:如何在 models.py 而不是 views.py 中总结模型的反对票和赞成票元素?

Django: How to sum downvote and upvote elements of a model in models.py and not in views.py?

我有一个 NewLink 模型,它有 3 个不同的 IntegerField 属性,一个用于反对票,一个用于投票,最后一个用于两个赞和反对字段的总和。我知道每次需要“linklikesum”元素时如何将我的视图文件中的两个字段相加,但我不知道如何轻松地将其直接编码到模型中。我显然更愿意将总和硬编码为 linklikesum 元素的 属性,这样我就不必做 Foo = NewLink.objects.get(pk=X) 之类的事情,然后 Foo.upvote + Foo.downvote 有人可以帮我吗,所以我不必每次都这样做?提前致谢

供参考,这是模型本身:

class NewLink(models.Model):
    upvote = models.IntegerField(default=0)
    downvote =  models.IntegerField(default=0)
    linklikessum = models.IntegerField(default=0)
    url = models.URLField(null=True)
          “””. . .more stuff…“”” 

        def __unicode__(self):
            return.self.url

除非这个总数是计算费用,否则我不会将其存储在数据库中,只是将其作为模型的 属性。例如:

class NewLink(models.Model):
    upvote = models.IntegerField(default=0)
    downvote =  models.IntegerField(default=0)
    @property
    def votetotal(self):
        return self.upvote + self.downvote

但是如果 的计算成本很高,您可以在模型的 save() 方法中执行此操作,例如:

class NewLink(models.Model):
    def save(self, *args, **kw):
        self.votetotal = self.upvote + self.downvote
        super(NewLink, self).save(*args, **kw)

如果我对问题的理解正确,您将需要创建所谓的方法。方法是模型中的函数。与其使用三个 IntegerField,不如只使用两个并执行类似这样的操作。

class NewLink(models.Model):
    upvote = models.IntegerField(default=0)
    downvote =  models.IntegerField(default=0)
    url = models.URLField(null=True)
      “””. . .more stuff…“”” 

    def __unicode__(self):
        return self.url

    def link_likes_sum(self):
        return self.upvote + self.downvote