Многоуровневое объединение в Джанго - PullRequest
0 голосов
/ 08 ноября 2019

Мне было интересно, есть ли простой способ получить родителя (A) модели (C) в Django, учитывая, что A имеет отношение многих ко многим с B, которое имеет отношения многих ко многим с C?

редактировать:

class Project(models.Model):
   levels = models.ManyToManyField('Level', through="ProjectLevel",
       related_name='levels_project')

class Level(models.Model):
    areas = models.ManyToManyField('Area', through="LevelArea",
        related_name='areas_level')

class Area(models.Model):
    name = models.CharField(max_length=50)

1 Ответ

1 голос
/ 09 ноября 2019

Я не пробовал, но я думаю, что следующий код может работать. Перекрестный палец:)

  1. Для данного проекта вы получаете набор запросов всех связанных уровней
  2. , вы перебираете этот набор запросов для создания набора запросов Area, добавляя все области для каждого уровняТаким образом, вы должны получить все «листовые» области для данного проекта.
p = Project.objects.get(pk=1) # Get a specific project, change the query accordingly

levels = p.levels.all()
areas = None

for level in levels:
    areas = areas | level.areas.all()

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