gpt4 book ai didi

mysql - Django 一对多查询

转载 作者:行者123 更新时间:2023-11-29 11:19:38 24 4
gpt4 key购买 nike

我有 2 张 table ,UserPayment具有一对多的关系。

付款时我有字段 date_updatedstatus .

我可以在一个查询中获取所有使用 date_updated < 3 months ago 付款的用户吗?如果有超过 3 个月前的其他付款,则状态应与已完成不同。如果在用户身上发现此类付款,则应退回该用户,否则不应退回。

例如,我有一个用户去年只进行了一次付款,我想返回,但如果同一用户最近超过 3 个月前进行了另一次付款,并且状态已完成,则不应退回该用户.

我正在尝试:

User.objects.filter(
Q(orders__payments__date_updated__lte=time_x_months) &
Q(Q(orders__payments__date_updated__gte=time_x_months) &
~Q(orders__payments__status=Payment.STATUS_COMPLETED))
)

最佳答案

它可能会存档来自 Payment 的查询,如下所示:

from django.db.models import Count, Q 
users = Payment.objects.filter(
Q(date_updated__lte=time_until) &
Q(date_updated__gte=time_from) &
~Q(status=Payment.STATUS_COMPLETED)
).values('user').annotate(count=Count('pk'))

或者只是:

from django.db.models import Count 
users = Payment.objects.filter(
date_updated__lte=time_until,
date_updated__gte=time_from
).exclude(
status=Payment.STATUS_COMPLETED)
).values('user').annotate(count=Count('pk'))

(缩进可能错误)

关于mysql - Django 一对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39146323/

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