首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用queryset缓存优化django管理

如何使用queryset缓存优化django管理
EN

Stack Overflow用户
提问于 2013-08-01 05:25:56
回答 1查看 2.7K关注 0票数 4

我试图从管理员处优化dbase查询,方法是缓存结果并在以后的查询中使用。但是-我仍然看到每个条目的dbase请求。

我有个这样的模特:

代码语言:javascript
复制
class actions(models.Model):
   user = models.ForeignKey(MyUser)
   action = ...

class Myuser(Models.Model):
   name = models.CharField()
   company = models.ForeignKey(Companies)

在admin change_list中,我希望看到一个包含:

代码语言:javascript
复制
user    action    company_name

因此,我将我的管理定义如下:

代码语言:javascript
复制
class ActionsAdmin(admin.ModelAdmin):
  list_display = ('user','action','company_name')
  ...

 def company_name(self,instance):
   return instance.user.company

当我运行这个程序时,我看到对于每个用户,都有一个对公司模型的查询来提取公司的名称。但是,由于公司不多,而且在许多情况下,用户会执行多次操作,所以我想查询所有公司一次,然后使用缓存的结果,而不是访问每个条目的dbase。

我怎么能这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-05 13:25:54

使用相关指定要使用查询选择的关系,因此在您的示例中:

代码语言:javascript
复制
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字段:

代码语言:javascript
复制
class ActionsAdmin(admin.ModelAdmin):
  list_display = ('user','action','user__company__name')
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17985825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档