【发布时间】:2012-03-29 07:29:54
【问题描述】:
我正在尝试改进一些现有的代码,这些代码最初需要 3 分钟来准备一个大型数据表(然后由 Ajax 返回)。旧代码迭代一个大型查询集,从各种相关对象中收集信息。根据我的阅读和监控 SQL 日志,迭代查询集通常是一个坏主意,因为 SQL 是为每个项目执行的。相反,我一直在使用值在单个 SQL 语句中收集信息,然后对其进行迭代。使用这种技术,我将执行时间减少到 15 秒以下(我还没有完成)。但是因为我不再使用模型对象,所以我不能使用get_FOO_display()。有没有办法在使用 values() 时使用此功能?
简化,原文是:
for user in users:
data.append(user.get_name_display()) # Appends 'Joe Smith'
return data
而新代码是:
for user in users.values('name'):
data.append(user['name']) # Appends 'JSmith001', which is incorrect
return data
另外,如果有其他方法可以保存模型对象的创建,但只需要在后端使用一条 SQL 语句,我很想知道。谢谢!
【问题讨论】:
-
需要查看更多代码。这太笼统了,无法回答。
-
对不起,我在上面添加了 cmets,但我不确定您还想看什么。
标签: python django django-queryset