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
我有一个 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