1

それぞれが 1 つ以上の OrderRow オブジェクトに接続されている多数の Order オブジェクトがあります (Order.order_rows.all() を使用して、親の Orders と逆の関係として表示されます)。

各 OrderRow にはcollection_status属性があり、「collected」、「uncollected」、またはその他の特別な値を指定できます。各注文にはステータス属性があり、有効な値の 1 つは「処理中」です。

次の基準で Order オブジェクトをリストする Order QuerySet を構築しようとして途方に暮れています: 注文ステータスは「処理中」であり、その OrderRows の数はそのcollection_status='collected'OrderRows の合計数よりも少なくなっています。まったく回収されていない、または部分的に回収されているが、完全には回収されていない注文、つまり。

明示的な方法でそれを置くには:

2 行の注文、両方とも「未回収」:
3 行の QS
注文に含まれます。

(「収集されていない」を「収集されていない」他の値に置き換えることができ、基準は同じです。「収集された」対他の collection_status です)

私は Order.objects.filter(status__exact='processing') まで取得しましたが、それを超えて、注釈、 Q() オブジェクトなどでのすべての試みは惨めに失敗しました。

4

1 に答える 1

0

あなたの質問を少なくとも30回読み直しました。何が必要なのか理解できたか確認させてください。

OrderRow.collection_status=='collected' を持つ注文は除外されるため、これは機能しません。

Order.objects.filter(status='processing').exclude(order_row__collection_status='collected')

他のことを試してみましょう

orders=Order.objects.filter(status='processing')
arr=[]
for order in orders:
  col=order.order_rows.filter(collection_status='collected')
  if col.count() < order.order_rows.all().count():
    arr.append(order.pk)

orders=orders.filter(pk__in=arr)

明確にするために

その collection_status='collected' OrderRows の数が、その OrderRows の合計数より少ない

あなたの質問を31回読んだ後、注文が持つことができるOrderRowsの総数は常に>=「収集された」OrderRowsの数になるようです

29 行、14 行が収集され、15 行がその他の注文を含める必要がありますか? 29 行、15 行が収集され、14 行がその他の注文はどうでしょうか?

于 2009-12-13T20:51:32.130 に答える