Django:如何在模型.py而不是在views.py?

2024-05-19 12:36:30 发布

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

我有一个NewLink模型,它有3个不同的IntegerField属性,一个用于downpots,一个用于upvotes,最后一个用于两个up和down字段的和。我知道如何在每次需要'linklikessum'元素时将视图文件中的两个字段相加,但我不知道如何轻松地将其编码到模型中。显然,我更喜欢将求和硬编码为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

Tags: 模型selfdefaulturl元素编码属性foo
2条回答

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

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

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

^{pr2}$

如果我正确地理解了这个问题,你需要创建一个叫做方法的东西。方法是模型中的函数。与其做三个整数域,不如只用两个整数域,然后做这样的事情。在

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

相关问题 更多 >