일부 인스턴스가 쿼리 세트에서 제외되어 있는지 확인해야하는 경우가 있습니다. 내가 그들을 더있는 경우,필드 검색을 사용하지 않고 쿼리 세트의 특정 인스턴스를 제외하는 장고
unwanted_instance = MyModel.objects.get(pk=bad_luck_number)
uninteresting_stuff_happens()
my_results = MyModel.objects.exclude(id=unwanted_instance.id)
또는 :
이 방법 나는 보통 그것을 할 것입니다
my_results = MyModel.objects.exclude(id_in=[uw_in1.id, uw_in2.id, uw_in3.id])
이 조금 투박한 '느낌', 그래서 시도 :
my_ideally_obtained_results = MyModel.objects.exclude(unwanted_instance)
다음 중 어떤 것도 작동하지 않습니다. 그러나 나는 하위 쿼리가 exclude에 대한 매개 변수로 사용될 수 있다고 here on SO을 읽었습니다.
나는 운이 없다? 일부 기능이 누락 되었습니까 (문서를 확인했지만 유용한 포인터를 찾지 못했습니다)
, 당신은 일이있는 경우 제외 할 쿼리 세트 (예 : 'MyModel.objects.filter ()')를 사용하면 다음과 같이 'ValuesQuerySet'을 사용하여 ID를 얻을 수 있습니다 : 'id_dicts = MyModel.objects.filter (). values ('id ')'그리고 나서 'query.exclude (id__in = [item_id_dicts]의 항목에 대한'id '])'. –
거의 4 년 후이 답변이 내 문제를 해결했습니다. :-) – Garfonzo
@ RacingTadpole의 제안에 뭔가를 추가하고 싶었습니다 :'values_list ("id", flat = True)'를 사용하면 모든 ID의 순차적 목록을 쉽게 얻을 수 있습니다. 그러나 이것은 DB에 영향을 미치므로 파이썬의리스트 이해력을 사용하도록 제안 할 것입니다. – stschindler