2012-01-13 18 views

Respuesta

3

hasta django 1.4 (actualmente en alfa) la administración de Django solamente órdenes por parte de la primera columna en Meta ordering. Puede solucionar este reemplazando el conjunto de consultas:

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

Gracias, sin embargo he intentado su código pero no surten efecto, estoy usando Django 1.3. –

12

Prueba esto:

Conjunto ordenación en su modelo Meta:

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

y añadir esta clase en 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) 

Añadir este método en su admin.ModelAdmin

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

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

+0

Use 'get_queryset' en lugar de 'get_query_set' en django 1.11 – Jickson

1

En relación con la respuesta de user535010 arriba: luché porque después de añadir el código sugerido que ya no era capaz de ordenar los campos haciendo clic en los encabezados de la vista de la lista de administradores. He modificado el método get_changelist sugerido para MyModelAdmin de la siguiente manera:

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 función requerida para hacer el trabajo, haga clic-venta con el arreglo de varias columnas de clasificación es la siguiente:

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

revés a la contestación de jenniwren :-)

Cuestiones relacionadas