LINUX.ORG.RU

[django] many-to-many выборка


0

0

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

В модель для таблицы предприятий добавил ManyToManyField ("модель_с_людьми").

А как теперь джанге сказать, что связь у этих таблиц через поля с кодом? Пробовал через промежуточную таблицу - ругается, что there is no unique constraint matching given keys for referenced table "таблица с предприятиями"

для raw sql задача тривиальная; но хочется путями ORM всё сделать.

Если делать две выборки и потом банально средствами питона просматривать словари - катасрофически падает скорость (обработка занимает около 2х секунд). Подскажите, пожалуйста, возможно ли это решить средствами Django ORM?

Ответ на: Re: [django] many-to-many выборка от commit

Re: [django] many-to-many выборка

Пример читал; но если надо вывести список предприятий с работающими там людьми? У меня в этом загвоздка...

Unnamed_Hero ★★★ ()
Ответ на: Re: [django] many-to-many выборка от Unnamed_Hero

Re: [django] many-to-many выборка

Аналогичным способом. В шаблон передаешь объект fabric. В шаблоне, например:


{{ fabric }} persons:
<ul>
{% for person in fabric.person_set.all %}
<li>{{ person }}</li>
{% endfor %}
<ul>

commit ()
Ответ на: Re: [django] many-to-many выборка от commit

Re: [django] many-to-many выборка

или, если нужно не в шаблоне

for fabric in Fabric.objects.all():
    for person in fabric.person_set.all():
        #do something with person

z0D5e8n7x_2 ()
Ответ на: Re: [django] many-to-many выборка от commit

Re: [django] many-to-many выборка

или передаем в шаблон Person.objects.all() под именем persons

<ul>
{% for person in persons %}
    {% ifchanged person.fabric %}
        </ul>{{ person.fabric.name }} <ul>
    {% endifchanged %}
    <li>{{ person.name }}</li>
{% endfor %}
</ul>


так может даже быстрее будет работать?

z0D5e8n7x_2 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.