我试图通过缓存结果和在即将到来的查询中使用来优化管理员的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.
我怎样才能做到这一点?
使用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)
归档时间: |
|
查看次数: |
1936 次 |
最近记录: |