두 가지 사용자 지정 관리자 메서드가있는 Django 모델이 있습니다. 각각은 객체의 다른 속성에 따라 모델 객체의 다른 하위 집합을 반환합니다.
각 관리자 메서드에서 반환 된 쿼리 집합의 합집합 인 쿼리 집합 또는 개체 목록을 얻을 수있는 방법이 있습니까?
두 가지 사용자 지정 관리자 메서드가있는 Django 모델이 있습니다. 각각은 객체의 다른 속성에 따라 모델 객체의 다른 하위 집합을 반환합니다.
각 관리자 메서드에서 반환 된 쿼리 집합의 합집합 인 쿼리 집합 또는 개체 목록을 얻을 수있는 방법이 있습니까?
답변:
이것은 작동하고 조금 더 깨끗해 보입니다.
records = query1 | query2
중복을 원하지 않는 경우 다음을 추가해야합니다 .distinct()
.
records = (query1 | query2).distinct()
ManyToManyField
s를 처리 할 때 때때로 잘못된 결과를 반환 할 수 있습니다 . 예를 들어,이 records.count()
값이보다 큽니다 query1.count() + query2.count()
. 이는 분명히 잘못된 것입니다.
QuerySet
클래스에 대한 방법을 제공 __and__
하고 __or__
호출 할 때 그 &
또는 |
운영자가 둘 사이에 사용되는 QuerySet
도에 사용되는 객체 ( Q
클래스뿐만 아니라 ).
'query1 | 대신'query1.union (query2) '를 사용하는 것이 좋습니다. query2 '; 위의 두 가지 방법에서 다른 결과를 얻었으며 이전 방법은 내가 기대 한 것입니다. 다음은 내가 본 것입니다.
print "union result:"
for element in query_set1.union(query_set2):
print element
print "| result:"
for element in (query_set1 | query_set2):
print element
결과:
union result:
KafkaTopic object
KafkaTopic object
KafkaTopic object
KafkaTopic object
KafkaTopic object
| result:
KafkaTopic object
KafkaTopic object