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) 关系的主要内容,如果未能解决你的问题,请参考以下文章

Django 对象扩展/一对一关系问题

向银行系统添加利率和透支费

计算收入、费用、存款和取款表的损益

django:用于计费计划、条带化和发票的软件包

为客户订阅定期付款计划后如何获取费用 ID?

Stripe 在订阅的应用程序方面的费用,试图在发票上进行更新,但它太快了