TLDR;
Есть ли лучший способ обработки глубоких вложений в этом Django запросе?
File.objects.filter(folder__project__workspace__organization__in=user.organizations.all())
Подробный вопрос :
Вот пример сценария:
Организация состоит из нескольких пользователей, и пользователь может быть частью нескольких организаций.
class User(models.Model):
pass
class Organization(models.Model):
members = models.ManyToManyField(
User, through='OrganizationMembership', related_name='organizations'
)
class OrganizationMembership(models.Model):
member = models.ForeignKey(User)
organization = models.ForeignKey(Organization)
Вложенные отношения Среди моделей определены следующие:
class Workspace(models.Model):
organization = models.ForeignKey(Organization, related_name='workspaces')
class Project(models.Model):
workspace = models.ForeignKey(Workspace, related_name='projects')
class Folder(models.Model):
project = models.ForeignKey(Project, related_name='folders')
class File(models.Model):
folder = models.ForeignKey(Folder, related_name='files')
Я хотел отфильтровать все файлы, к которым запрашивающий пользователь имеет доступ в разных организациях. Вот мой набор запросов, есть ли способ оптимизировать этот набор запросов?
user = self.request.user
organizations = user.organizations.all()
File.objects.filter(folder__project__workspace__organization__in=organizations)