Как получить экземпляры промежуточных моделей, связанные с конкретной c моделью в симметричном соотношении m2m Django? - PullRequest
0 голосов
/ 04 мая 2020

Начиная с Django 3.0, поддерживается symmetrical=True для рекурсивных отношений m2m с использованием модели through. [ docs ]

Например, со следующими моделями, где объекты Town симметрично связаны друг с другом через объекты Roads:

class Town(models.Model):
    neighboors = models.ManyToManyField('self', through='Road', symetrical=True)

class Road(models.Model):
    from_town = models.ForeignKey('Town', models.CASCADE, related_name='road_from')
    to_town = models.ForeignKey('Town', models.CASCADE, related_name='road_to')

Как получить все Road экземпляров, связанных с указанным c town?

Как объясняет do c, related_name из двух fk в Road модели должны быть разными, то есть один обратный процессор, такой как town.related_road, не будет работать.

Конечно, я могу установить два разных related_name и объединить результаты двух запросов, но это не кажется очень Pythoni c мне:

class Town(models.Model):
    ...
    @property
    def roads(self):
        return self.road_to + self.road_from

Есть ли другой способ, которым я могу этого достичь?

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