我试图从管理员处优化dbase查询,方法是缓存结果并在以后的查询中使用。但是-我仍然看到每个条目的dbase请求。
我有个这样的模特:
class actions(models.Model):
user = models.ForeignKey(MyUser)
action = ...
class Myuser(Models.Model):
name = models.CharField()
company = models.ForeignKey(Companies)在admin change_list中,我希望看到一个包含:
user action company_name因此,我将我的管理定义如下:
class ActionsAdmin(admin.ModelAdmin):
list_display = ('user','action','company_name')
...
def company_name(self,instance):
return instance.user.company当我运行这个程序时,我看到对于每个用户,都有一个对公司模型的查询来提取公司的名称。但是,由于公司不多,而且在许多情况下,用户会执行多次操作,所以我想查询所有公司一次,然后使用缓存的结果,而不是访问每个条目的dbase。
我怎么能这么做?
发布于 2013-08-05 13:25:54
使用相关指定要使用查询选择的关系,因此在您的示例中:
class ActionsAdmin(admin.ModelAdmin):
list_display = ('user','action','company_name')
list_select_related = ('user__company', )
...
def company_name(self,instance):
return instance.user.company编辑:
您还可以在list_display上直接指定字段,而不需要自定义方法。
它应该为您处理list_select_related (至少根据上面链接的文档)。如果假设您的Companies模型有一个name字段:
class ActionsAdmin(admin.ModelAdmin):
list_display = ('user','action','user__company__name')https://stackoverflow.com/questions/17985825
复制相似问题