我正在尝试改进一些现有的代码,这些代码最初耗时3分钟来准备一个大型dataTable(然后由Ajax返回).旧代码遍历大型querySet,从各种相关对象收集信息.从我所阅读的内容和监视SQL日志开始,迭代查询集通常是一个坏主意,因为SQL是针对每个项目执行的.相反,我一直在使用值来在单个SQL语句中收集信息,然后迭代它.使用这种技术,我将执行时间减少到15秒以下(我还没有完成).但是因为我不再使用模型对象,所以我不能使用get_FOO_display().有没有办法在使用values()时使用此功能?
简化后,原来是:
for user in users:
data.append(user.get_name_display()) # Appends 'Joe Smith'
return data
Run Code Online (Sandbox Code Playgroud)
新代码是:
for user in users.values('name'):
data.append(user['name']) # Appends 'JSmith001', which is incorrect
return data
Run Code Online (Sandbox Code Playgroud)
此外,如果有其他方法来保留模型对象的创建,但只需要在后端有一个SQL语句,我很想知道它.谢谢!