итерация над fk в django

#django #foreign-keys

#django #внешние ключи

Вопрос:

если у меня есть таблица, подобная этой, представленная в модели django

 person
------
id
name

worker
------
personid
jobid

job
---
id
desc
wage

w=Worker.objects.filter(<some sort of filter)
  

теперь я хочу, чтобы все, persons которые связаны в w
w , были даны, я не могу использовать это утверждение.

в конечном итоге я хочу вернуть строку json, которая представляет dict
с idperson ключом в качестве и {"job":jobid,"wage":wage} в
качестве одного значения в списке jobs для этого ключа

Комментарии:

1. «Я хочу, чтобы все люди, которые связаны»? С чем это связано?

2. w содержит список workers Я хочу получить список persons из этого w

3. Если у вас есть список работников, у вас есть список лиц, основанный на внешнем ключе.

4. @CraigKerstiens, я знаю, мне нужен уникальный список лиц, перечисленных в w

Ответ №1:

Вы должны иметь возможность использовать in с любой коллекцией объектов, которую вы пожелаете. Это должно выглядеть примерно так:

 w = Worker.objects.filter(job__in=Job.objects.filter(somefilterhere))
  

Отсюда, конечно, вы могли бы выполнить итерацию по своим workers и создать свой список:

 somelist = []
for worker in w:
    somelist.append({'person': worker.person.id, 'wage': worker.job.wage})
  

Комментарии:

1. у человека может быть много заданий, и таким образом я получу дубликаты

Ответ №2:

http://docs.djangoproject.com/en/1.3/topics/db/queries/#following-relationships-backward

 Person.objects.filter(worker__id__in=[worker.pk for worker in w])
  

спасибо за поддержку