如何重构此 django 查询以不选择每个单独的对象?
Posted
技术标签:
【中文标题】如何重构此 django 查询以不选择每个单独的对象?【英文标题】:How can I refactor this django query to not select each individual object? 【发布时间】:2011-03-13 15:51:11 【问题描述】:这是我的看法:
def rsvp_list(request, id, template="rsvp/rsvp_list.html"): rsvp = RSVP.objects.get(id=id) 返回render_to_response(模板, '参加者':rsvp.attendee_set.all().order_by('email__first_name'), , context_instance=RequestContext(request))这是我的模板:
% for 参加者 in 参加者 % 参加者.email.get_name 参加者.客人 % 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】:我应该在文档中进一步阅读。
为了减少稍后将发生在相关对象上的查询,只需使用select_related。所以我的查询变成了:
attendees = rsvp.attendee_set.select_related().all().order_by('email__first_name')
【讨论】:
以上是关于如何重构此 django 查询以不选择每个单独的对象?的主要内容,如果未能解决你的问题,请参考以下文章