Django查询一对多

时间:2016-08-25 13:12:20

标签: mysql django django-queryset

我有2个表,Paymentdate_updated,其关系为One-To-Many。

在付款时,我有字段statusdate_updated < 3 months ago

我是否可以在一个查询中进行查询,以获得所有使用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)) ) 付款的用户,以及是否有超过3个月之前的其他付款,而不是状态应该不同于已完成。如果在用户上找到这样的付款,则不应该退还用户。

例如,我让用户在去年只付了一次付款,我想要退回,但是如果同一个用户最近再次付款而不是3个月前,并且状态已完成,则不应退回用户

我正在尝试:

<li [class.active]="homeLink.classList.contains('active')">
    <a #homeLink routerLink="/home" routerLinkActive="active">Home</a>
</li>

1 个答案:

答案 0 :(得分:1)

它可能会像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'))

(缩进可能错误)