Django:获取每个用户的发票、费用、提款。 (ORM) 关系
Posted
技术标签:
【中文标题】Django:获取每个用户的发票、费用、提款。 (ORM) 关系【英文标题】:Django: Get each user Invoices, Expenses, Withdrawals. (ORM) relationship 【发布时间】:2021-07-05 10:58:23 【问题描述】:我被困了几个小时,想不出正确的方法。所以基本上我知道循环不是一个很好的做法,因为如果我们有很多用户,系统就会开始超时。所以我的想法是选择正确的方式来获得我需要的东西。
这是我们的核心方案:
我需要制作这种“桌子”,这些是我需要的东西:
这是要显示在我们前端的东西,所以现在,我只需要收集正确的数据并将其传递给我们的 FE。我们使用 celery 任务,所以时间总是固定的(例如星期一下午 6 点)
这是我迄今为止尝试过的......
for user in User.objects.all():
start_date = timezone.now() - timedelta(weeks=1)
# How to loop correctly over every user and check for invoices??
invoices = InvoiceItem.objects.select_related('invoice', 'invoice__operation_ptr_id')
# invoices[0].operation_ptr_id ???
循环的for user in User.objects.all()
可能应该替换为annotate
。如何建立关系以获取发票、提款、费用?
【问题讨论】:
如果您的发票和客户表是通过 customer_id(user_id) 链接的。使用 for 循环“用户”对象中的 user_id 查询发票表。其他型号也类似。 @VaibhavKakade 你可以看到核心方案。 你能为你的模式提供一组(最少的)模型吗?我不想用未经测试的代码来回答,而且我当然不会手工编写所有这些模型;-) @LordElrond ***.com/questions/68286797/…,我无法登录此帐户,srry 如果你要在 celery beat 上运行它,你不应该关心时间,所以它在一个小时或一分钟内运行不会有什么不同。 【参考方案1】:尝试从用户而不是 InvoiceItem 模型进行查询
我不确定您需要返回前端具体什么,但如果需要,在做一些注释后返回实际值应该很容易
要获取用户的发票数量,请尝试以下操作:
from django.db.models import Count
User.objects.annotate(total_invoices=Count("invoices"))
至于提款和费用,这些模型似乎与 User 模型根本没有关系。我建议更新您的模型以添加它们之间的关系,并像上面的查询一样查询它们。
我还假设用户 = 客户,因为您实际上并没有在其他帖子中提供客户模型。
【讨论】:
以上是关于Django:获取每个用户的发票、费用、提款。 (ORM) 关系的主要内容,如果未能解决你的问题,请参考以下文章