문제

제외를 여러 번 호출하는 대신 쿼리를 수행하고 사물 목록을 제외 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

NED에 대한 답변을 바탕으로 태그 목록을 제외하고 싶은 것처럼 들립니다. 그래서 당신은 그냥 사용할 수 있습니다 in 필터:

names_to_exclude = [o.name for o in objects_to_exclude] 
Foo.objects.exclude(name__in=names_to_exclude)

그것이 당신이 원하는 것을합니까?

다른 팁

제외 전화가 여러 번 전화하는 것이 잘못된 것은 무엇입니까? 쿼리는 게으르고 데이터를 가져 오려고 할 때까지 아무 일도 일어나지 않으므로 .exclude ()를 두 번 이상 사용하는 데는 단점이 없습니다.

당신은 그것을 쉽게 할 수 있습니다 Q 객체:

from django.db.models import Q

excludes = None
for tag in ignored_tags:
    q = Q(tag=tag)
    excludes = (excludes and (excludes | q)) or q # makes sure excludes is set properly
set_minus_excluded = Foo.objects.exclude(excludes)

또한 exclude ()를 사용하여 동적으로 수행 할 수 있어야합니다.

qs = Foo.objects.all()
for tag in ignored_tags:
    qs = qs.exclude(tag=tag)

Daniel Roseman의 답변을 향상시키기 위해 큰 데이터 세트에서 비용이 많이 드는 for 루프 대신 쿼리 세트에서 직접 필요한 값을 얻는 것이 더 나을 것이라고 생각합니다.

names_to_exclude = objects_to_exclude.values_list('name')
Foo.objects.exclude(name__in=names_to_exclude)

당신은 이것도 시도 할 수 있습니다.

exclude_list = ['A', 'B', 'C'] qs = Foo.objects.exclude(items__in=exclude_list)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top