Django:获取每个用户的发票、费用、提款。(ORM) 关系

DzI*_*ITC 5 python django orm

我已经被困了几个小时,无法找出正确的方法来做到这一点。所以基本上我知道循环并不是一个很好的做法,因为如果我们有很多用户,系统就会开始计时。所以我的想法是选择正确的方式来获得我需要的东西。

这是我们的核心方案:

这是我们的核心方案

我需要制作这种“桌子”,这些是我需要的东西:

在此处输入图片说明

这就是我们前端会显示的东西,所以现在,我只需要收集正确的数据并将其传递给我们的 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 ???
Run Code Online (Sandbox Code Playgroud)

循环for user in User.objects.all()可能应该替换为annotate. 我如何建立关系以获取发票、取款、费用?

Edw*_* Fu 2

尝试从 User 而不是 InvoiceItem 模型进行查询

我不确定您具体需要返回前端什么,但如果需要,在做了一些注释后返回实际值应该很容易

要获取用户的发票数量,请尝试以下操作:

from django.db.models import Count
User.objects.annotate(total_invoices=Count("invoices"))
Run Code Online (Sandbox Code Playgroud)

至于提款和费用,这些模型似乎与 User 模型完全没有关系。我建议更新您的模型以添加它们之间的关系,并像上面的查询一样查询它们。

我还假设用户=客户,因为您实际上没有在其他帖子中提供客户模型。