0
我有兩個模型:Order
和OrderStatus
。Django - 如何過濾多個反向查詢匹配的查詢集
不要擔心訂單,但OrderStatus具有以下字段:
order = models.ForiegnKey(Order)
status = models.CharField (choice that can be either ORDERED, IN_TRANSIT, or RECEIVED)
OrderStatuses在創建時訂單狀態改變,所以最初也只是一個ORDERED
狀態,再後來的ORDERED
和IN_TRANSIT
狀態,那麼後來的一個ORDERED
,IN_TRANSIT
和RECIEVED
狀態全部作爲foriegn鍵存在於一個Order中。這是爲了跟蹤時間等。
我想找到所有具有所有三種狀態的訂單。換句話說,所有已收到的訂單都是有效的,因爲它們具有其他兩種狀態。
這是返回一個空集:
Order.objects.filter(Q(orderstatus__status=OrderStatus.ORDERED) &
Q(orderstatus__status=OrderStatus.IN_TRANSIT) &
Q(orderstatus__status=OrderStatus.RECEIVED))):
...但是這是工作的罰款:
Order.objects.filter(orderstatus__status=OrderStatus.ORDERED)
.filter(orderstatus__status=OrderStatus.IN_TRANSIT)
.filter(orderstatus__status=OrderStatus.RECEIVED)
這裏有什麼區別?有什麼辦法可以簡化嗎?我認爲這是Q對象的用途。
謝謝。說得通。任何方式來簡化三重過濾器? – grokpot 2014-12-10 21:37:06
你想要什麼作爲輸出?你想要包含所有三個狀態的'Order'嗎?在該狀態下是否有多對多的連接? – abhishekgarg 2014-12-10 21:37:50
是的,是否有可能通過單個過濾器來查找? – grokpot 2014-12-10 21:40:53