2012-01-13 11 views

risposta

3

fino django 1.4 (attualmente in alpha) l'amministratore Django soltanto gli ordini nel prima colonna Meta ordering. È possibile aggirare il sovrascrivendo il set di query:

class MyAdmin(admin.ModelAdmin): 
    def queryset(self, request): 
     qs = super(MyAdmin, self).queryset(request) 
     qs = qs.order_by('last_name', 'first_name') 
     return qs 
+3

Grazie, comunque ho provato il tuo codice ma non ha avuto effetto, sto usando Django 1.3. –

12

Prova questo:

Imposta ordine nel modello Meta:

class Meta: 
    ordering = ["some_field", "other_field"] 

e aggiungere questa classe in admin.py:

from django.contrib.admin.views.main import ChangeList 

class SpecialOrderingChangeList(ChangeList): 
    """ 
    Django 1.3 ordering problem workaround 
    from 1.4 it's enough to use `ordering` variable 
    """ 
    def get_query_set(self): 
     queryset = super(SpecialOrderingChangeList, self).get_query_set() 
     return queryset.order_by(*self.model._meta.ordering) 

Aggiungi questo metodo nel tuo admin.ModelAdmin

def get_changelist(self, request, **kwargs): 
    return SpecialOrderingChangeList 

fonte: https://groups.google.com/forum/?fromgroups#!topic/django-users/PvjClVVgD-s

+0

Usa 'get_queryset' invece di 'get_query_set' in django 1.11 – Jickson

1

A seguito della risposta del user535010 sopra: ho faticato perché dopo aver aggiunto il codice suggerito non ero più in grado di ordinare i campi facendo clic sulle intestazioni nella vista lista admin. Ho modificato il metodo get_changelist consigliato per MyModelAdmin come segue:

def get_changelist(self, request, **kwargs): #ordering issue in 1.3 workaround 
    try: 
     if not request.GET['o']: 
      return SpecialOrderingChangeList 
    except KeyError: 
     pass 
    return super(MyModelAdmin, self).get_changelist(request) 
0

La funzione richiesta per far funzionare click-ordinazione con la correzione multi-colonna di ordinamento è questo:

def get_changelist(self, request, **kwargs): 
     try: 
      if request.GET['o']: 
       return super(ModelAdmin, self).get_changelist(request) 
     except KeyError: 
      pass 
     return SpecialOrderingChangeList 

contrario alla risposta di jenniwren :-)

Problemi correlati