Django admin:具有 User 外键的 ModelAdmin 每行添加一个查询
我在 Django admin 中遇到的一个问题: 我创建了一个 ModelAdmin 派生类。 此类的属性 list_select_lated 设置为 True。
如果我将外键字段添加到 list_display 中的用户模型中,无论我做什么,显示的每一行都会添加以下形式的查询:
SELECT `auth_user`.`id`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`password`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`is_superuser`, `auth_user`.`last_login`, `auth_user`.`date_joined`, `auth_user`.`picture_id` FROM `auth_user` WHERE `auth_user`.`id` = 1
它使管理变得非常慢,这是怎么回事?提前致谢。
An issue I have in Django admin :
I created a ModelAdmin derived class.
This class has an attribute list_select_related set to True.
If I add a foreign key field to the User model in list_display, whatever I do, every row displayed adds a query in the following form :
SELECT `auth_user`.`id`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`password`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`is_superuser`, `auth_user`.`last_login`, `auth_user`.`date_joined`, `auth_user`.`picture_id` FROM `auth_user` WHERE `auth_user`.`id` = 1
It makes the admin quite slow, what is going on ? Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好的,我设法解决了这个问题。
您的代码必须非常具体。
您必须像这样重写 ModelAdmin.queryset 以防止运行那些额外的无用查询。
这使得查询计数从 286 减少到 7(对于 100 个项目的页面)。
编辑 ModelAdmin.queryset
您必须仔细选择字段和外键。
如果您想知道,user.picture 字段是使用 Model.add_to_class 方法添加的。
Okay, I managed to resolve the issue.
You have to be very specific in your code.
You have to override ModelAdmin.queryset like this to prevent those extra useless queries from being run.
This got the query count down from 286 to 7 (for a page of 100 items).
Editing ModelAdmin.queryset
You will have to select your fields and your foreign keys carefully.
If you were wondering, the user.picture field was added with the Model.add_to_class method.