일반적인 예. 이런 질문을 할 때Django 쿼리는 동일한 객체를 두 번 반환합니다.
a = MyObject.objects.filter(...)
에는 필터와 일치하는 모든 것이 포함됩니다. 그러면 내가 할 때 :
a.filter(...)
a는 두 필터와 일치하는 개체 만 포함합니다. 맞습니까? 따라서 첫 번째 필터() 이후에 5 개의 요소가있을 수 있고 두 번째 필터() 뒤에 2 개의 필터가 남을 수 있습니까?
내 검색어 중 하나와 함께 이상한 결과가 나타납니다. 다음 쿼리 :
>>> Item.objects.filter(account__in=Account.objects.filter(customer=a), disabled=False)
[<Item: PSN-100396>]
결과가 하나입니다. 100396은 기본 키이므로이 idnetifier가있는 항목은 하나만있을 수 있습니다. 나는 장애인 송장 또는 전혀 송장에있는 항목 만 표시해야합니다 추가 필터를 적용 할 때 현재 :
>>> Item.objects.filter(account__in=Account.objects.filter(customer=a), disabled=False).filter(Q(iteminv__invoice__disabled=False) | Q(iteminv__isnull=True))
[<Item: PSN-100396>, <Item: PSN-100396>]
나는 두 번 같은 개체와이 결과를 얻기를 ... 어떻게 이런 일이 가능할까요? 내가 뭔가를 오해 했니?
하면() 같은 이상한 출력 생성 한 필터에 모든 퍼팅 :
>>> Item.objects.filter(Q(account__in=Account.objects.filter(customer=a)), Q(disabled=False), Q(iteminv__invoice__disabled=False) | Q(iteminv__isnull=True))
[<Item: PSN-100396>, <Item: PSN-100396>]
장고 버전 1.6.2
SQL 쿼리를 살펴 보았습니까? 그것은 어딘가에 합류하고 있을지 모른다. –
그것이 진행되고있는 것처럼 보입니다. 인터넷 검색을하면서 .distinct()를 추가하여 정렬 할 수 있다는 것을 알았지 만 왜 중복을 생성하는지 이해할 수 없습니다. 나는 잠시 동안 장고를 사용 해왔다. 복잡한 쿼리에서도이 동작을 본 적이 없다. – Eldamir