Объединение разных моделей в Джанго - PullRequest
0 голосов
/ 30 апреля 2010

Допустим, у меня есть эта модель данных:

class Workflow(models.Model):
  ...

class Command(models.Model):
  workflow = models.ForeignKey(Workflow)
  ...

class Job(models.Model):
  command = models.ForeignKey(Command)
  ...

Предположим, где-то я хочу пройтись по всем объектам рабочего процесса, и для каждого рабочего процесса я хочу пройти по его командам, а для каждой команды я хочу пройти по каждому заданию. Есть ли способ структурировать это с помощью одного запроса?

То есть я бы хотел, чтобы Workflow.objects.all() присоединился к зависимым моделям, поэтому я получаю коллекцию, в которой уже кэшированы зависимые объекты, поэтому рабочие процессы [0] .command_set.get () не производят дополнительный запрос .

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 30 апреля 2010

С другой стороны это легко, так как вы можете сделать

all_jobs = Job.objects.select_related().all()

И любой job.command или job.command.workflow не будет производить дополнительный запрос.

Не уверен, если это возможно с запросом рабочего процесса.

0 голосов
/ 01 мая 2010

Я думаю, что единственный способ сделать это - использовать django.db.connection и написать собственный запрос.

Поскольку это будет повторять все экземпляры Job (ваши ForeignKeys не установлены в ноль), в любом случае вы можете выбрать все Job и затем сгруппировать их вне ORM

...