Запрос Django с противоречивыми полями возвращает дублирующиеся ответы

Запрос:

cameraSystems = DWCloudSystem.objects.filter(isShared=False).filter(company_key=comp)
cameraSystems = cameraSystems | DWCloudSystem.objects.filter(isShared=True).filter(location__owners=comp)

DWCloudSystem - это модель, которая содержит:

"company_key" a foreign key representing a Company model object,
"location" a foreign key representing a place object,
"isShared" a Boolean field

Объект места также содержит поле "владельцы" ManyToMany для объектов компании.

По сути, цель состоит в том, чтобы иметь DWCloudSystem, принадлежащую компании, которая находится в месте, которое будет возвращено, если isSharing is false

или еслиSharing равен true, то любая компания, принадлежащая объекту place, сможет получить доступ к этой DWCloudSystem вместе со своей компанией-"владельцем", которая представлена полем company_key (которое может быть или не быть членом поля "owners", являющегося частью модели place)

Проблема в том, что этот запрос возвращает одну и ту же компанию дважды, хотя isShared установлен в True, и, следовательно, другой запрос должен быть пустым. Оба запроса работают правильно, если их не объединять.

Используйте одно условие фильтрации и используйте .distinct(…) [Django-doc] для возврата отличных DwCloudSystems:

from django.db.models import Q

DWCloudSystem.objects.filter(
    Q(isShared=False, company_key=comp) |
    Q(isShared=True, location__owners=comp)
).distinct()
Вернуться на верх