2016-08-25 20 views
0

2対1の関係を持つUserPaymentという2つのテーブルがあります。1対多のDjangoクエリ

私はフィールド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)) 
) 

答えて

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')) 

(インデント間違った可能性があります)

私がしようとしている何