【问题标题】:Prefetch m2m field values in django-admin在 django-admin 中预取 m2m 字段值
【发布时间】:2015-09-29 00:08:21
【问题描述】:

我有自己的 Auth User 模型,它继承自 PermissionsMixin。当我访问该模型的任何实例的 django-admin 页面时,我得到了很多数据库查询(因为我有很多权限)。问题出在这里,django/contrib/auth/models.py:

class Permission(models.Model):

[...]

def __str__(self):
    return "%s | %s | %s" % (
        six.text_type(self.content_type.app_label),
        six.text_type(self.content_type),
        six.text_type(self.name))

每次在管理页面上显示权限时,都会查询其 content_type。

问题是:我能否确保对于涉及我的身份验证用户模型的每个查询,特别是对于不是来自我的代码(如 django 管理员)的查询,都将针对权限及其 content_types 运行 prefetch_related?

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    如果您只需要 django-admin,那么您可以使用 official documentation 中描述的技术创建自己的管理页面。

    例如:

    from django.contrib import admin
    from django.contrib.auth.models import Permission
    
    from foo.models import User
    
    
    class UserAdmin(admin.ModelAdmin):
        def formfield_for_manytomany(self, db_field, request=None, **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)
    
    admin.site.register(User, UserAdmin)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-28
      • 2011-03-07
      • 2013-06-25
      • 1970-01-01
      • 2014-01-02
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多