gpt4 book ai didi

python - DJANGO:通过 QuerySet exclude() 进行 FK 字段查找

转载 作者:行者123 更新时间:2023-11-29 12:12:43 25 4
gpt4 key购买 nike

我试图从 Django 查询集中排除在另一个查询集中具有外键的所有对象。但是,我没有成功使用 exclude()。请帮忙。

这是 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

我在 debian wheezy 上使用 django 1.7、python 2.7.7、postgresql 9.3。

更新:意识到我可以看到 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"))

最佳答案

fo = fill_order.objects.exclude(product_order__in=shipped)

产生:

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

这会将 product_order_idshipment_detail_id 进行比较。 不是我想要的!

解决方案:

利用@alecxe 建议的 .filter(...__in=[r.product_order for r in shipped]),创建一个嵌套的 sql SELECT 作为 IN 参数。

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 (4))

关于python - DJANGO:通过 QuerySet exclude() 进行 FK 字段查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24270947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com