Django ListView с использованием обратного поиска иностранных ключей - PullRequest
0 голосов
/ 10 февраля 2012

Если у меня есть следующий код:

Person

Email
  FK(Person)

Phone
  FK(Person)

Address
  FK(Person)

И я хочу отобразить ListView с каждым человеком, номером телефона, адресом электронной почты и адресом для каждого из них, все () [0] хорошоДостаточно, как мне пойти о создании QuerySet для передачи в ListView?

Спасибо

1 Ответ

0 голосов
/ 10 февраля 2012

Являются ли отношения один-к-одному или один-ко-многим?Если один к одному, вы можете получить все ссылки в одном запросе, используя агрегацию функций Django.(Изменить: извините, не ссылки, только их pks) Например:

from django.db.models import Min
Person.objects.all().annotate(email=Min('email'), phone=Min('phone'), address=Min('address'))

Я не знаю, будет ли он хорошо интегрироваться с ListView, хотя ... Может быть, с использованием OneToOneField будет работать в этом случае (даже без агрегации), я не уверен.

Если отношения один-ко-многим, я боюсь, что вы не сможете сделать это водиночный запрос.Как вы, наверное, уже знаете, имея объект Person, вы можете получить связанные модели, используя суффикс _set: email_set, phone_set и address_set.Но для доступа к ним вам потребуются другие запросы (больше обращений к базе данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...