我是Django的新手,我想了解如何使用经理。我已经阅读了文档,但需要一些帮助才能付诸实践。
我的模型如下:
class Place(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=300)
class PlaceRef(models.Model):
place = models.ForeignKey(Place)
entry = models.ForeignKey(Entry)
value = models.FloatField()
units = models.CharField(max_length=30)
如果我有特定的Place
,我是否应该使用管理器来添加与之关联的所有PlaceRefs
的值? (为简单起见,假设所有单位都相同......)
place = Place.objects.get(id=id)
value = PlaceRef.objects... # what to do here?
答案 0 :(得分:1)
这里不需要新经理。已经有一个自动管理器处理Place和PlaceRef之间的关系 - 它可以通过place.placeref_set
访问。
但要添加值,您需要使用aggregation - 特别是aggregate
方法。
from django.db.models import Sum
value = place.placeref_set.aggregate(Sum('value'))
现在value
是一个字典,其中包含一个值,其中包含相关PlaceRef中所有值的总和。
答案 1 :(得分:1)
您也可以将其添加为地点属性
class Place(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=300)
@property
def placeref_total(self):
do your calculation here as suggested in Daniel's answer
value = self.placeref_set.aggregate(Sum('value'))
return value
然后你可以在你的代码中引用它:
myplace = Place.objects.get(id=x)
myplace.placeref_total
如果您不使用@property装饰器,请将其称为: myplace.placeref_total()