2015-07-10 4 views
1

У меня есть собственная модель пользователя Auth, которая наследуется от PermissionsMixin. Пока я посещаю страницу django-admin для любого экземпляра этой модели, я получаю много запросов db (так как у меня много разрешений). Проблема здесь лежит, Джанго/вно/авт/models.py:Значения полей Prefetch m2m в django-admin

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.

Вопрос: могу ли я гарантировать, что для каждого запроса, связанного с моей моделью пользователя Auth, особенно для того, что не получается из моего кода (например, django admin), будет выполняться prefetch_related для разрешений и их content_types?

ответ

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) 
Смежные вопросы