【发布时间】:2020-04-29 04:10:34
【问题描述】:
我有一个模型,其中一个特定的类将有多个子类。样本设计:
class ParentModel(models.Model):
ParentName = CharField(max_length=50)
class ChildModelA(models.Model):
FK1 = ForeignKey(ParentModel, on_delete=models.CASCADE)
ChildAValue = IntegerField(default=0)
class ChildModelB(models.Model):
FK2 = ForeignKey(ParentModel, on_delete=models.CASCADE)
ChildBValue = IntegerField(default=0)
我要做的是根据“ParentName”总结所有 ChildAValue 和 ChildBValue 的总和。我遇到的问题是,当我在同一个查询中执行这两项操作时,我得到了 ChildA 和 ChildB 之间的笛卡尔积。示例查询:
ParentModel.objects.all().values('ParentName').annotate(
ChildASum = Sum('childamodel__ChildAValue),
ChildBSum = Sum('childbmodel__ChildBValue),
)
结果查询集给了我 ChildBValue 的总和乘以 FK 中 ChildA 对象的总数...这意味着指向该特定 Parent 的 6 个 ChildA 对象将我的 ChildB 值乘以 6。反之亦然儿童总和。
有没有什么方法可以在没有多重连接的情况下聚合同一个父级的多个子模型?
谢谢!
【问题讨论】:
标签: django django-models django-queryset django-aggregation django-annotate