2013-07-26 3 views
0

У меня есть несколько таблиц, которые идут один-ко-многим в одном направлении:Multiple обратный внешний ключ обходом

class ShiftGroup(models.Model): 
    def getJobType(self): 
     ??? 

class Shift(models.Model): 
    shift_group = models.ForeignKey(ShiftGroup, related_name="shifts") 

class Run(models.Model): 
    shift = models.ForeignKey(Shift, related_name="runs") 

class Job(models.Model): 
    run = models.ForeignKey(Run, related_name="jobs", blank=True, null=True) 
    job_type = models.ForeignKey(JobType, related_name="jobs") 

На мой взгляд, я потянув QuerySet из ShiftGroups для отображения в таблице, но Мне нужно также отобразить job_type. Я знаю, что может вытащить информацию из сдвига с помощью

ShiftGroup.shifts.all() 

, но есть ли способ вызова

ShiftGroup.shifts.runs.jobs.job_types 

в представлении или шаблоне без необходимости вложенных для петель?

ответ

1

Ваш вопрос не имеет смысла в качестве поставленного. Как вы знаете, каждая ShiftGroup имеет несколько сдвигов, каждый Shift имеет несколько прогонов, так как так. Поэтому нет такой вещи, как «job_type» для ShiftGroup: их много.

Если вы просите список всех job_types в рабочих местах в прогонах в сдвигах в текущем ShiftGroup, то вы должны начать с JobType и использовать синтаксис двойного подчеркивания:

JobType.objects.filter(job__run__shift__shift_group=self) 

но снова , это список рабочих мест, ни одного. Если это так, все эти отношения могут закончиться только в случае, когда есть один тип работы, то у вас что-то не так с вашим моделированием данных: возможно, у вас должен быть прямой ForeignKey от ShiftGroup до JobType.

+0

хорошо, это то, что я понял. Спасибо Даниэлю, я рассмотрю создание таблицы связей между shift_groups и job_types – PhaZePhyR

Смежные вопросы