Comment puis-je commander par plusieurs champs dans le django-admin?
Merci
Comment puis-je commander par plusieurs champs dans le django-admin?
Merci
Essayez ceci:
Définissez l'ordre dans votre modèle Meta
:
class Meta:
ordering = ["some_field", "other_field"]
et ajoutez cette classe dans admin.py
:
from django.contrib.admin.views.main import ChangeList
class SpecialOrderingChangeList(ChangeList):
"""
contournement du problème d'ordonnancement de Django 1.3
à partir de 1.4, il suffit d'utiliser la variable `ordering`
"""
def get_query_set(self):
queryset = super(SpecialOrderingChangeList, self).get_query_set()
return queryset.order_by(*self.model._meta.ordering)
Ajoutez cette méthode dans votre admin.ModelAdmin
def get_changelist(self, request, **kwargs):
return SpecialOrderingChangeList
source: https://groups.google.com/forum/?fromgroups#!topic/django-users/PvjClVVgD-s
Jusqu'à django 1.4 (actuellement en alpha), l'admin django ne trie que par la première colonne dans Meta ordering
. Vous pouvez contourner cela en remplaçant la requête :
class MyAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(MyAdmin, self).queryset(request)
qs = qs.order_by('last_name', 'first_name')
return qs
Suite à la réponse de l'utilisateur535010 ci-dessus: J'ai eu du mal car après avoir ajouté le code suggéré, je n'ai plus été en mesure de classer les champs en cliquant sur les en-têtes dans la vue de la liste d'administration. J'ai modifié la méthode get_changelist suggérée pour MyModelAdmin comme suit:
def get_changelist(self, request, **kwargs): #problème de classement dans le contournement 1.3
try:
if not request.GET['o']:
return SpecialOrderingChangeList
except KeyError:
pass
return super(MyModelAdmin, self).get_changelist(request)
La fonction requise pour que le clic sur le tri multicolumnaire fonctionne avec la correction de tri est la suivante :
def get_changelist(self, request, **kwargs):
try:
if request.GET['o']:
return super(ModelAdmin, self).get_changelist(request)
except KeyError:
pass
return SpecialOrderingChangeList
De l'autre côté de la réponse de jenniwren :-)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.