我试图返回子查询中另一个模型的字段总和
我的主查询集返回company类型的所有用户。我必须返回从CreditOrder获取数据所使用的信用总数,并对credit_used字段求和
我正在使用来自django-modelcluster的ClusterableModel和ParentalKey
我的CreditOrder
模型
class CreditOrder(ClusterableModel):
credit = ParentalKey(
Credit, on_delete=models.CASCADE, related_name="credit_order"
)
order = ParentalKey(Order, on_delete=models.CASCADE, related_name="credit_order")
credit_used = models.DecimalField(
max_digits=12, decimal_places=2, null=True, blank=True
)
我的User
模型
class User(AbstractUser, ClusterableModel):
username = models.CharField(max_length=40, null=True, blank=True)
user_type = models.CharField(max_length=20, choices=TIPO_UTENTE, default="dipendente")
我的queryset使用类模型用户
def get_queryset(self, request):
qs = super().get_queryset(request)
qs = qs.filter(user_type='company')
credits_used_subquery = Subquery(CreditOrder.objects.filter(credit__font__company__id=OuterRef('id')).order_by()
.values('credit_used').annotate(credit_used_sum=Sum('credit_used'))
.values('credit_used_sum'), output_field=DecimalField())
qs = qs.annotate(
_credits_used_sum=credits_used_subquery
)
return qs
但这个错误正在返回给我:
django.db.utils.ProgrammingError: more than one row returned by a subquery used as an expression
如果看不到CreditOrder和User之间的所有模型,就很难准确地说出您的错误。看起来信用模型链接到字体,字体可能有一个名为Company的属性,它是用户模型的外键
在任何情况下,您的第一个
values
调用的参数都是错误的,您需要按照在外部引用中链接到的基本相同的内容进行分组在对值的第一次调用中。并保持对值的注释和第二次调用相同
另一个答案建议使用联接而不是子查询进行求和,如果您喜欢该api的简单性,但仍然希望使用子查询,则可以使用django-sql-utils包。在你之后
pip install django-sql-utils
如果您只需要将公司使用的所有积分相加,您可以执行以下操作:
我用这门课解决了我的问题:
及
相关问题 更多 >
编程相关推荐