/ / Prefetch m2m Feldwerte in Django-Admin - Django, Django-Modelle, Django-Admin

Prefetch m2m Feldwerte in Django-Admin - Django, Django-Modelle, Django-Admin

Ich habe ein eigenes Auth-Benutzermodell, das von mir erbtBerechtigungenMixin. Während ich die django-admin-Seite für jede Instanz dieses Modells besuche, erhalte ich viele db-Abfragen (da ich viele Berechtigungen habe). Das Problem liegt hier, 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))

Jedes Mal, wenn auf der Admin-Seite eine Berechtigung angezeigt wird, wird eine Abfrage für den Content-Typ durchgeführt.

Die Frage ist: kann ich sicherstellen, dass für jede Abfrage, die mein Auth-Benutzermodell betrifft, insbesondere für das, was nicht aus meinem Code stammt (wie django admin), prefetch_related für Berechtigungen und deren content_types ausgeführt wird?

Antworten:

2 für die Antwort № 1

Wenn Sie dies nur für django-admin benötigen, können Sie Ihre eigene Admin-Seite mit den unter beschriebenen Techniken erstellen offizielle Dokumentation.

Zum Beispiel:

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)