Как я могу реорганизовать этот запрос django, чтобы не выбирать каждый отдельный объект? - PullRequest
1 голос
/ 09 июля 2010

Вот мой взгляд:

def rsvp_list(request, id, template="rsvp/rsvp_list.html"):
    rsvp = RSVP.objects.get(id=id)

    return render_to_response(template, {
        'attendees': rsvp.attendee_set.all().order_by('email__first_name'),
    }, context_instance=RequestContext(request))

, а вот мой шаблон:

{% for attendee in attendees %}
{{ attendee.email.get_name }}{{ attendee.guests }}
{% endfor %}

Когда запрос выполняется, шаблон затем запускает запрос для каждого участника, чтобы получить их первыйфамилия (получить имя просто соединяет два).Вот пример запроса, который django запускает из шаблона:

SELECT `rsvp_email`.`id`, `rsvp_email`.`added`, `rsvp_email`.`first_name`, `rsvp_email`.`last_name`, `rsvp_email`.`address` FROM `rsvp_email` WHERE  `rsvp_email`.`id` = 1038

Как я могу получить имя и фамилию каждого участника, это первый запрос, не повторяющий его 400 раз в шаблоне?

1 Ответ

1 голос
/ 09 июля 2010

Мне следовало бы прочитать немного дальше в документации.

Чтобы уменьшить количество запросов, которые будут происходить с последующим связанным объектом, просто используйте select_related .Так что мой запрос становится:

attendees = rsvp.attendee_set.select_related().all().order_by('email__first_name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...