Джанго многие ко многим через упрощение запросов?

surfer190 спросил: 27 ноября 2017 в 05:53 в: django

У меня есть 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)

0 ответов