gpt4 book ai didi

python - 如何获取数据表的正确查询集

转载 作者:行者123 更新时间:2023-12-01 00:09:14 25 4
gpt4 key购买 nike

我有两个模型:个人资料和付款。我需要在前端显示一个数据表,其中包含“用户名”、“电子邮件”和“总花费”字段。用户名和电子邮件可以在配置文件模型中找到,因此查询集将是:

def get_initial_queryset(self):
return Profile.objects.all()

但是,“总支出”信息需要计算为在同一“profile_id”的付款模型中找到的所有“payment_amount”字段的总和,因为用户可以有两次付款(一次金额 = 5,另一次金额 = 5)金额=15,我需要显示total_spent=20)。

问题是,由于我使用的是数据表,我需要这个“total_spent”字段在查询集中(使用注释或其他方法)。

我尝试过使用 Subquery 和 OuterRef,但在生成的最终 SQL 中出现错误。

return Profile.objects.all().annotate(
money_spent=Subquery(
Payment.objects.filter(user_id__in=OuterRef('id')).annotate(
money_spent=Sum('amount')
),
output_field=CharField()
)
)

但这给了我 SQL 错误:(1241, '操作数应包含 1 列')

如何获得正确的查询集?

Django 版本:1.11 |Python版本:3.6.8

最佳答案

您根本不需要执行子查询,您可以在 docs regarding joins and aggregates 中查看更多信息

Profile.objects.annotate(money_spent=Sum('payment__amount'))

这将导致以下结果

SELECT profile.*, SUM(payment.amount) AS money_spent
FROM profile
LEFT OUTER JOIN payment ON payment.profile_id = profile.id
GROUP BY profile.id

关于python - 如何获取数据表的正确查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59743033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com