Django пересечение ManyToMany с использованием сквозной модели - PullRequest
0 голосов
/ 28 марта 2020

У меня есть две модели, которые имеют отношение ManyToMany с использованием сквозной модели.

class Person(Model):
    departments = ManyToManyField('Department', through='DepartmentStaff')

class Department(Model):
    id = ...

class DepartmentStaff(Model):
    staff_member = ForeignKey(Person, on_delete=CASCADE)
    department = ForeignKey(Department, on_delete=CASCADE)
    experience = DurationField()

Я хочу проверить, имеют ли 2 объекта Person хотя бы один отдел. например, если человек p1 работает в отделах d1 и d2, а сотрудник p2 работает в отделах d2 и d3, то оба они работают в d2, результат должен быть True

Я знаю, что не могу сделать что-то подобное

>>> p1.departments.intersection(p2.departments).exists()
...
AttributeError: 'ManyRelatedManager' object has no attribute 'query'

, потому что я использую сквозные отношения. Как лучше всего проверить, содержит ли хотя бы 2 набора запросов ManyToMany хотя бы один и тот же элемент?

1 Ответ

1 голос
/ 28 марта 2020

Может как то так?

DepartmentStaff.objects.filter(staff_member='p1', department__in=DepartmentStaff.objects.filter(staff_member='p2'))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...