Django/orm

두 가지 조건을 exclude 시 and 연산

두잇 두두 2024. 1. 17. 11:21
728x90

exclude안에 두 개의 조건을 넣고 코드를 잘 넣어줬는데도 조건이 먹히지 않는 경우가 발생했다.

.exclude(id__in=OwnerPlace.objects.values_list('place'),
          categories__id=exclude_category.id)

 

.exclude(Q(id__in=OwnerPlace.objects.values_list('place'))
    | Q(categories__id='a78312ef-865e-4e87-ae2c-d761131f4ae5'))

 

exclude는 기본적으로 and 조건으로 여러 조건을 결합하기에, 두 개의 조건을 넣게 되면 두 조건을 만족하는 객체 만이 대상에서 제외 되기 때문에 앞의 현상이 발생했던 것이다.

그래서 밑의 코드와 같이 Q객체를 이용해 or 조건을 생성해서 exclude함수에 전달합니다.

이렇게 되면 두 가지 조건 중 하나를 만족하게 되면 객체를 제외해서 원하는 결과 값을 기대할 수 있습니다.