Django 内容类型表查询在管理用户添加页面其他页面中命中 n 次,工作正常。任何人都可以协助解决这个问题,并让我知道为什么它会多次出现吗? 这是查询
SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE "django_content_type"."id" = 94
也分享截图
从
UserChangeForm
导入 django.contrib.auth.forms
并将 form = UserChangeForm
添加到您的 UserAdmin(admin.ModelAdmin)
课程。
它添加了这一行:
user_permissions.queryset = user_permissions.queryset.select_related('content_type')
,它将所有 n 个查询替换为一个查询。
根据您的用户模型,您可能需要扩展
UserChangeForm
(请参阅文档)。
当您在用户模型中子类 AbstractUser 时,就会出现问题。 很快:您必须在 django admin 中更改更改表单。 首先创建新的变更表单并设置 model = User,其中 User 是从 AbstractUser 子类化的新用户模型:
class AdminChangeForm(forms.UserChangeForm):
class Meta:
model = User
fields = '__all__'
然后在您的用户管理中将表单设置为上面的类:
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = ['id', 'username', 'first_name', 'last_name', 'email', 'is_active', 'last_login', 'date_joined']
list_filter = ('last_login', 'date_joined', 'is_active')
form = AdminChangeForm
我也有同样的问题。在您的用户管理中添加此功能
from django.contrib import admin
from django.contrib.auth.models import Permission
from foo.models import UserModel # your auth model
@admin.register(UserModel)
class UserAdmin(admin.ModelAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == 'user_permissions':
kwargs['queryset'] = Permission.objects.all().select_related('content_type')
return super(UserAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
上面的代码覆盖
Permission
查询集以通过 select_related
函数减少查询