2012-01-18 9 views
8

Tengo un modelo (Nodo) que está ordenado por fecha en el administrador, por lo que los nodos más recientes se muestran primero. Esto esta bien.Orden de selección de administrador de Django diferente al pedido de modelo predeterminado

El mismo modelo (Node) es referenciado por otro modelo (Dispositivo). Al editar un dispositivo, hay una lista de nodos (en una selección de HTML) que también está ordenada por fecha. Me gustaría que esta selección se pida por nombre y no por fecha.

¿Es posible tener dos métodos de pedido diferentes, uno para la lista de objetos y otro para el cuadro de selección?

Gracias.

Respuesta

6

Lo más fácil sería reemplazar el método formfield_for_foreignkey en el ModelAdmin para Device, algo así como

def formfield_for_foreignkey(self, db_field, request, **kwargs): 
    if db_field.name == 'node': 
     kwargs['queryset'] = Node.objects.order_by('name') 
    return super(DeviceAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

(estoy asumiendo una buena cantidad aquí. Con suerte está claro!)

Del mismo modo que hay formfield_for_manytomany.

+0

Este es mi método preferido. –

+1

gracias, funciona como se puede ver aquí: https://github.com/ninuxorg/nodeshot/issues/65 – nemesisdesign

2

Ha intentado algo así como:

class Node 
     name = ... 
     date = ... 
     fields .... 

     class Meta: 
      order_with_respect_to='Device' 
      ordering = ('Device', 'name') 
+0

no sabía esa opción, +1 por enseñarme algo nuevo, pero no lo creo resuelve mi problema – nemesisdesign

+0

Esta solución todavía necesitaría algo como lo que se menciona en la respuesta de aceptación para obtener