一对多的Django查询

Django query in one to many

我有 2 个表,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'))

(缩进可能有误)