#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])
спасибо за поддержку