如何使用queryset缓存优化django Admin

Ori*_*itK 4 django admin

我试图通过缓存结果和在即将到来的查询中使用来优化管理员的dbase查询.但是 - 我仍然看到每个条目的dbase请求.

我有这样的模型:

class actions(models.Model):
   user = models.ForeignKey(MyUser)
   action = ...

class Myuser(Models.Model):
   name = models.CharField()
   company = models.ForeignKey(Companies)
Run Code Online (Sandbox Code Playgroud)

在admin change_list中,我想看一个表:

user    action    company_name
Run Code Online (Sandbox Code Playgroud)

所以我定义我的管理员如下:

class ActionsAdmin(admin.ModelAdmin):
  list_display = ('user','action','company_name')
  ...

 def company_name(self,instance):
   return instance.user.company
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

mkr*_*eli 6

使用list_select_related指定要与查询一起选择的关系,因此在您的情况下:

class ActionsAdmin(admin.ModelAdmin):
  list_display = ('user','action','company_name')
  list_select_related = ('user__company', )
  ...

 def company_name(self,instance):
   return instance.user.company
Run Code Online (Sandbox Code Playgroud)

编辑:

您也可以直接在其中指定字段list_display,而无需自定义方法.

它应该list_select_related为你处理(至少根据上面链接的文档).如果假设您的Companies模型有一个name字段:

class ActionsAdmin(admin.ModelAdmin):
  list_display = ('user','action','user__company__name')
Run Code Online (Sandbox Code Playgroud)