У меня есть Project
, User
и таблица "многие-ко-многим", называемая ProjectMembership
:
class Project(models.Model):
'''Project model
'''
name = models.CharField(max_length=255, unique=True)
users = models.ManyToManyField(
settings.AUTH_USER_MODEL,
through='ProjectMembership'
)
is_active = models.BooleanField(
default=True,
)class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True, null=True)
is_active = models.BooleanField(
default=True,
)
projects = models.ManyToManyField(
Project,
through=ProjectMembership
)class ProjectMembership(models.Model):
'''Project Membership model
'''
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.PROTECT
)
project = models.ForeignKey(Project, on_delete=models.PROTECT)
is_project_manager = models.BooleanField(default=False)
Теперь я хочу получить список всех активных менеджеров проектов по всем активным проектам, в которых работает конкретный пользователь. Я использовал следующий запрос и циклы ниже, но, возможно, есть способ сделать это без циклов?
projects = self.leave_not_required_user.projects.filter(is_active=True)
users = []
for project in projects:
project_memberships = project.projectmembership_set.filter(
is_project_manager=True,
user__is_active=True
).all()
for project_membership in project_memberships:
users.append(project_membership.user)