运行n次django_content_type查询

问题描述 投票:0回答:3

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

也分享截图

django django-admin
3个回答
4
投票

UserChangeForm
导入
django.contrib.auth.forms
并将
form = UserChangeForm
添加到您的
UserAdmin(admin.ModelAdmin)
课程。

它添加了这一行:

user_permissions.queryset = user_permissions.queryset.select_related('content_type')
,它将所有 n 个查询替换为一个查询。

根据您的用户模型,您可能需要扩展

UserChangeForm
请参阅文档)。


1
投票

当您在用户模型中子类 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

完整教程: https://testdriven.io/blog/django-custom-user-model/


1
投票

我也有同样的问题。在您的用户管理中添加此功能

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
函数减少查询

© www.soinside.com 2019 - 2024. All rights reserved.