2
我試圖排除在另一個查詢集中具有外鍵的django查詢集中的所有對象。但是,我沒有成功使用exclude()
。請幫忙。DJANGO:通過QuerySet的FK字段查找排除()
下面是從Python Shell中的一個片段:
>>> shipped = shipment_detail.objects.all()
>>> shipped
[<shipment_detail: 4>]
>>> fo = fill_order.objects.exclude(product_order__in=shipped)
>>> fo
[<fill_order: 2>]
>>> for x in shipped:
... x.product_order.id
...
1
>>> fo
[<fill_order: 2>]
>>> for x in fo:
... x.product_order.id
...
1
我使用Django 1.7,蟒蛇2.7.7和PostgreSQL 9.3,Debian的喘息。
UPDATE:實現我可以看到sql django正在使用。這裏是。顯然不是什麼即時通訊試圖實現。看起來我需要明確告訴django我的意思是引用FK id而不是記錄ID。
SELECT "box_inv_fill_order"."id", "box_inv_fill_order"."product_order_id",
"box_ inv_fill_order" ."date"
FROM "box_inv_fill_order"
WHERE NOT ("box_inv_fill_order"."product_order_id"
IN (SELECT "box_inv_shipment_detail"."id" FROM "box_inv_shipment_detail"))
'fill_order.objects.exclude(product_order_id__in = [r.id for r])'有什麼區別嗎?謝謝。 – alecxe
Thx @alecxe!這與查看實際的sql結合起來,這是一個非常簡單和明確的修復。由於我在'運行'查詢集中引用了FK,因此我使用'r.product_order'來裝載''。謝謝! –
不要忘記你可以使用'.values_list('id',flat = True)'來最小化資源並優化它。 – dt0xff