두 모델이 있습니다 : Order
및 OrderStatus
입니다.Django - 여러 역방향 조회 일치에서 쿼리 세트를 필터링하는 방법
주문에 대해 걱정하지 마십시오,하지만 OrderStatus는 다음과 같은 필드가 있습니다
order = models.ForiegnKey(Order)
status = models.CharField (choice that can be either ORDERED, IN_TRANSIT, or RECEIVED)
OrderStatuses는 주문 상태가 변경 될 때 생성, 그래서 처음에 다음, 나중에 ORDERED
및 IN_TRANSIT
상태 단지 ORDERED
상태 거기에있다, 나중에 ORDERED
, IN_TRANSIT
및 RECIEVED
상태는 모두 하나의 주문에 대한 foriegn 키로 존재합니다. 이것은 타이밍 등을 추적하는 것입니다.
세 가지 상태를 모두 가진 모든 주문을 찾고 싶습니다. 즉, 수신 된 모든 주문은 다른 두 상태를 가지고 있기 때문에 유효합니다.
이
는 빈 세트 반환 :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
출력으로 정확히 무엇을 원하십니까? 세 가지 상태가 모두 포함 된 '주문'을 원하십니까? 그 상태에 많은 것에서 많은 것이 있습니까, 아니면 어떻게 연결되어 있습니까? – abhishekgarg
예, 단일 필터로 찾을 수 있습니까? – grokpot