La bonne chose à propos de Django est que la page d'administration est puissante, mais si vous l'utilisez correctement, ORM émettra divers SQL, alors faites attention. Je commence juste à l'utiliser, donc je l'ajouterai au besoin.
Select_related est activé si list_display contient un champ ForeignKey. Cependant, select_related ne suit pas la relation du champ FK avec null = True, de sorte que la cible est extraite par SQL individuel pour le nombre d'enregistrements. Par conséquent, lorsque la page de liste est ouverte, l'instruction SELECT est émise environ 400 fois. De plus, select_related trace indéfiniment le champ FK avec null = False, donc il se peut que ce soit SQL qui se joint à 10 ou 20 tables.
Pour bien le faire, définissez vous-même queryset. Avec cela, vous pouvez créer JOIN autant que nécessaire.
admin.py
class UserRelationshipAdmin(admin.ModelAdmin):
list_display = ('id', 'from_user', 'to_user', 'is_block', 'is_friend', 'created_at')
def queryset(self, request):
return super(UserRelationshipAdmin,
self).queryset(request).select_related('from_user', 'to_user')
Les champs ForeignKey et choix sont affichés par défaut (élément de sélection) sur la page de détail. Ce sera génial si des dizaines de milliers de tables sont référencées, donc si vous spécifiez raw_id_fields, il affichera une zone de texte + étiquette.
admin.py
class UserProfileAdmin(admin.ModelAdmin):
raw_id_fields = ('user',)
Il y a une description ici dans le document officiel https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.raw_id_fields
Recommended Posts