我的舞台通过ZoneStage与区域相关,并且每个舞台都有每个区域的值。
我的SubStage通过ZoneSubStage与Zone相关,并且每个SubStage都有每个Zone的值。
每个阶段可以具有多个子阶段。
问题:如何显示每个阶段的值,以便该值是与该阶段相关的SubStages值的摘要?
例如
如果第1阶段获得SubStage 1.1、1.2、1.3:
Stage1.value = SubStage1.1.value + SubStage1.2.value + SubStage1.3.value
?
这是我的模型:
class Zone(models.Model):
zone_name = models.CharField()
zone_number = models.CharField()
class Stage(models.Model):
stage_number = models.CharField()
stage_name = models.CharField()
zones = models.ManyToManyField(Zone, through='ZoneStage')
class SubStage(models.Model):
sub_name = models.CharField()
stage = models.ForeignKey(Stage)
zones = models.ManyToManyField(Zone, through='ZoneSubStage')
class ZoneStage(models.Model):
zone = models.ForeignKey(Zone)
stage = models.ForeignKey(Stage)
value = models.PositiveSmallIntegerField(default=0)
def save(self, *args, **kwargs):
self.value = ZoneSubStage.objects.filter(substage__stage=stage_instance).aggregate(Sum('value'))
super(ZoneStage, self).save(*args,**kwargs)
class ZoneSubStage(models.Model):
zone = models.ForeignKey(Zone)
substage = models.ForeignKey(SubStage)
value = models.PositiveSmallIntegerField(default=0)
根据您写的内容,您可以得到一个Stage
as的值(stage_instance
作为您的Stage
实例):
ZoneSubStage.objects.filter(substage__stage=stage_instance).aggregate(Sum('value'))
# This will return {'value__sum': 90}
如果要通过调用获取值stage_instance.value
,最简单的方法是value
在Stage
模型中添加属性方法。
class Stage(models.Model):
stage_number = models.CharField()
stage_name = models.CharField()
zones = models.ManyToManyField(Zone, through='ZoneStage')
@property
def value(self):
return ZoneSubStage.objects.filter(substage__stage=self).aggregate(Sum('value')).get('value__sum', 0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句