我有一个NewLink模型,它有3个不同的IntegerField属性,一个用于downvotes,一个用于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
答案 0 :(得分:3)
除非这个总计是计算费用,否则我不会将其存储在数据库中,只需将其作为模型的属性即可。例如:
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)
答案 1 :(得分:1)
如果我正确理解了这个问题,你需要创建一个叫做方法的东西。方法是模型中的函数。而不是做三个IntegerFields,只使用两个并执行类似的操作。
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