Получение набора объектов модели, которые косвенно связаны - PullRequest
0 голосов
/ 22 января 2011

У меня есть 4 модели:

class TransitLine(models.Model):
    name = models.CharField(max_length=32)

class Stop(models.Model):
    line = models.ForeignKey(TransitLine, related_name='stops')

class ExitType(models.Model):
    name = models.CharField(max_length=32)
    people_limit = models.PositiveSmallIntegerField()

class Exits(models.Model):
    TOKEN_BOOTH     = 0
    GATE            = 1
    REVOLVING_DOOR  = 2

    EXIT_TYPES = (
        (TOKEN_BOOTH, 'Token booth'),
        (GATE, 'Gate'),
        (REVOLVING_DOOR, 'Revolving door'),
    )
    name = models.CharField(max_length=32)
    stop = models.ForeignKey(Stop, related_name='exits')
    type = models.ForeignKey(ExitType, related_name='exits')

У меня есть один TransitLine объект.Я хочу получить все уникальные ExitType объекты, которые связаны с Stop объектами TransitLine (это был полный рот).

Какой-то полупсевдокод того, что я хочу сделать:

tl = TransitLine.objects.get(id=1)
exit_types = []
for s in tl.stops:
    exit_types.append([e.type for e in s.exits])
unique_exit_types = list(set(exit_types))

Очевидно, предпочтительнее сделать это за один QuerySet вызов.Есть предложения?

1 Ответ

2 голосов
/ 22 января 2011

Я бы попробовал что-то вроде этого:

ExitType.objects.filter(exits__stop__line=line).distinct()
...