2012-01-18 10 views
8

Ho un modello (Nodo) che è ordinato per data nell'amministratore, quindi gli ultimi nodi vengono mostrati per primi. Questo va bene.Django admin seleziona l'ordinamento in modo diverso dal modello predefinito

Lo stesso modello (nodo) fa riferimento a un altro modello (Dispositivo). Quando si modifica un dispositivo, c'è una lista di nodi (in una selezione HTML) che è anche ordinata per data. Vorrei che questa selezione fosse ordinata per nome e non per data.

È possibile avere due diversi metodi di ordinazione, uno per l'elenco di oggetti e uno per la casella di selezione?

Grazie.

risposta

6

La cosa più semplice sarebbe quella di sovrascrivere il metodo formfield_for_foreignkey nella ModelAdmin per Device, qualcosa come

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) 

(sto assumendo una discreta quantità qui. Speriamo che sia chiaro!)

Allo stesso modo non c'è formfield_for_manytomany.

+0

Questo è il mio metodo preferito. –

+1

grazie, funziona come puoi vedere qui: https://github.com/ninuxorg/nodeshot/issues/65 – nemesisdesign

2

Hai provato qualcosa di simile:

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

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

non sapevo quell'opzione, +1 per insegnarmi qualcosa di nuovo, ma non credo risolve il mio problema – nemesisdesign

+0

Questa soluzione avrebbe ancora bisogno di qualcosa di simile a quanto menzionato nella risposta di accettazione per ottenere