Imr*_*zad 0 python django django-admin
我有各种使用该to_python方法解密的数据库字段.我遇到的问题是,每次访问admin.ModelAdmin此特定模型的管理部分(列表)时,页面都需要很长时间才能加载.我不需要该to_python方法来解密列表页面上的字段,因为我列出的字段或列根本没有加密.当用户点击某个项目进行编辑时,该to_python方法会完全按照预期启动,这很好.但是,如何to_python在列出对象时停止尝试解密对象的方法,请记住列表视图仅显示未加密的字段?此外,这会导致过滤器工作得非常慢.同样,过滤仅在非加密字段上完成,因此不需要该to_python方法自行执行.
所以问题是管理员将为每一行加载整个模型实例,即使你只显示了几个字段.解决方案应该是覆盖子类中的queryset方法,ModelAdmin以便它不使用get_query_set默认管理器的标准方法,而是使用该only方法只获取所需的字段:
class MyModelAdmin(admin.ModelAdmin):
list_display = ('foo', 'bar')
def queryset(self, request):
qs = self.model._default_manager.only('foo', 'bar')
ordering = self.get_ordering(request)
if ordering:
qs = qs.order_by(*ordering)
return qs
Run Code Online (Sandbox Code Playgroud)
(或者你可以使用defer('my_expensive_field'),这相当于同一件事).
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |