Запрос 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] для возврата отличных DwCloudSystem
s:
from django.db.models import Q
DWCloudSystem.objects.filter(
Q(isShared=False, company_key=comp) |
Q(isShared=True, location__owners=comp)
).distinct()