我收到此错误'经理无法通过舞台实例访问'。我花了几个小时试图解决它,但我不知道我做错了什么。
models.py
class StageManager(models.Manager):
def get_queryset(self):
return super(StageManager, self).get_queryset().filter(stage=self.id, stage__zone=self.zone).aggregate(Sum('substage_value'))
class Stage(models.Model):
tablerow_stage = models.ForeignKey(TRStage)
stage_value = models.PositiveSmallIntegerField(default=0)
slug = models.SlugField(unique=True)
zone = models.ForeignKey(Zone)
objects = models.Manager() # The default manager
subs_objects = StageManager()
def __str__(self):
return '%s.%s.%s' % (self.zone.project,
self.tablerow_stage.stage_num,
self.zone.zone_num)
模板中的代码行:
<td style="width:40px" align="center">{{ stage.subs_objects }}</td>
答案 0 :(得分:2)
Django不允许你stage.objects
,仅Stage.objects
(仅通过类,而不是类的实例)。您的自定义查询集遵循相同的规则。但事实是,即使允许这样做,您的查询集也不起作用 - 您引用的是id
和zone
等仅存在于模型实例中的字段,而不是管理器。
现在我并不完全确定你实际想要实现的目标,但是这里有一种方法可以放在Stage
类而不是那个查询集中。
def substage_sum(self):
return self.__class__.objects.filter(
stage=self.id,
stage__zone=self.zone
).aggregate(
sum=Sum('substage_value')
).values_list('sum', flat=True).first()
这将返回表示总和的单个值,假设这是你想要的。