我在Django管理员中遇到的问题: 我创建了一个ModelAdmin派生类。 此类的属性list_select_related设置为True。
如果我在list_display中向User模型添加外键字段,无论我做什么,显示的每一行都会以下列形式添加查询:
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
它使管理员很慢,发生了什么?提前谢谢。
答案 0 :(得分:1)
好的,我设法解决了这个问题。 您必须在代码中非常具体。 您必须像这样重写ModelAdmin.queryset,以防止运行那些额外无用的查询。 这使查询倒计时从286减少到7(对于100个项目的页面)。
class MyModelAdmin(ModelAdmin):
def queryset(self, request):
qs = super(AccessAdmin, self).queryset(request)
qs = qs.select_related('user','ip','user__picture').only('user__username','path','referrer','ip__id','ip__string','ip__country','time','user__id','id','ip__ip','user__picture','user__picture__id','user__picture__image')
return qs
您必须仔细选择字段和外键。 如果您想知道,user.picture字段是使用Model.add_to_class方法添加的。