J'ai un Les DJANGO DOCS < href = "https://docs.djangoproject.com/fr/dev/ref/contrib/admin/#django.contrib.admin.modeladmin.admin.modeladmin.list_select_Related" rel = "Nofollow Noreferrer"> Indique Vous pouvez ajouter Voici une version de coupe de mon modèle et mon modèle admin: p> Toutefois, ajoute que Des idées Pourquoi l'administrateur de Django semble ignorer mon liste_select_Related et faire n requêtes? J'utilise Python 2.7 et Django 1.3.3. P> P> Modeladmin Code> Classe qui inclut un champ de clé étranger dans son list_display code>. Mais la page de liste d'administration pour ce modèle fait des centaines de questions, une requête par ligne pour obtenir les données de l'autre table au lieu d'une jointure ( select_related () code>). list_s_select_related = true code> en tant qu'attribut à votre modeladmin pour que cela disparaisse, mais cela ne semble pas fonctionner du tout pour moi. Cette question "/a> semble donner un problème similaire, mais sa résolution n'est pas claire et ça ne " t Travailler dans mon cas. P> list_selected_related = Vrai code> n'a rien changé. Je reçois toujours beaucoup de questions comme ceci au lieu d'une jointure SQL: p>
p>
3 Réponses :
Le problème ici est ce paramètre list_s_select_related = true code> ajoute simplement un BASIC code> SELECT_RONATED () code> sur la requête, mais que cet appel ne suive pas par défaut, suivez les eRegrounds avec null = true code>. Donc, la réponse est de définir le queryset que la Changeelist utilise vous-même et spécifiez le FK à suivre: class EventAdmin(admin.ModelAdmin):
list_display = ('__str__', 'device')
def queryset(self, request):
return super(EventAdmin, self).queryset(request).select_related('device')
Merci! Le null = true code> sur la clé étrangère empêchait définitivement le fichier sélectionné. Je suppose que si j'avais suivi le DOCS Tout en bas, j'aurais vu que:" Notez que, par défaut, SELECT_Related () ne suive pas les clés étrangères qui ont NULL = VRAI "
Par intérêt, savez-vous pourquoi list_s_select_related = true code> n'est pas la valeur par défaut de l'administrateur Django? Cela semblerait être un défaut beaucoup plus raisonnable. (Je peux voir pourquoi par défaut select_related () code> ne suive pas les clés étrangères qui ont NULL = True, car cela pourrait être un problème de performance, mais je me demande sur list_s_select_related code > Dans d'autres cas.)
À Django> = 1.6 La méthode est maintenant nommée get_queryset code>.
depuis Django 1.6 , list_select_related code> Accepte un booléen, une liste ou un tuple avec les noms des champs à inclure dans le select_related () code> appel.
Par conséquent, vous pouvez maintenant utiliser: class EventAdmin(admin.ModelAdmin):
list_display = ('__str__', 'device')
list_select_related = ['device']
+1 tandis que la réponse de Daniel Roseman offre une bonne idée de la manière dont les choses fonctionnent. Cette réponse est la version plus simple / mise à jour.
Bien que où SELECT_RONATED code> est généralement le moyen d'aller, il y a du temps quand on nécessite plus de contrôle, puis sur la base du get_queryset code> devient plus applicable, il s'agit d'une version plus moderne de Réponse de Daniel Roseman: foo code> et bar code> sont des champs de clé étrangère: p>