首页 > 解决方案 > ManyToMany的Django交集使用Through模型

问题描述

我有两个使用直通模型具有多对多关系的模型。

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在部门工作d1d2并且人员p2在部门d2工作d3,那么他们都工作d2,输出应该是True

我知道我不能做这样的事情

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

因为我使用的是直通关系。检查 2 到 ManyToMany 查询集是否包含至少一个相同元素的最佳方法是什么?

标签: pythondjango

解决方案


也许是这样的?

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


推荐阅读