/ / Prefetch valori dei campi m2m in django-admin - django, django-models, django-admin

Prefetch m2m valori di campo in django-admin - django, django-models, django-admin

Possiedo un proprio modello utente di autenticazione, che eredita daPermissionsMixin. Mentre visito la pagina di django-admin per qualsiasi istanza di quel modello, ottengo molte query db (dato che ho molte autorizzazioni). Il problema si trova qui, 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))

Ogni volta che viene visualizzata un'autorizzazione nella pagina di amministrazione, effettua una query per il suo content_type.

La domanda è: posso assicurarmi che per ogni query che riguarda il mio modello Utente di Auth, specialmente per ciò che non proviene dal mio codice (come l'admin di django) verrà eseguito prefetch_related per le autorizzazioni e il loro content_types?

risposte:

2 per risposta № 1

Se hai bisogno di questo solo per django-admin, puoi creare la tua pagina di amministrazione usando le tecniche descritte in documentazione ufficiale.

Per esempio:

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)