2012-01-18 12 views
8

Mam model (węzeł), który jest uporządkowany według daty w admin, więc najnowsze węzły są wyświetlane jako pierwsze. Jest okej.Administrator Django wybrać porządek inny niż domyślny model zamawiania

Do tego samego modelu (węzła) odwołuje się inny model (urządzenie). Podczas edycji urządzenia znajduje się lista węzłów (w zaznaczeniu HTML), która jest również uporządkowana według daty. Chciałbym, aby ten wybór był sortowany według nazwy, a nie według daty.

Czy można stosować dwie różne metody zamawiania, jedną dla listy obiektów i jedną dla pola wyboru?

Dzięki.

Odpowiedz

6

Najłatwiej byłoby zastąpić metodę w ModelAdminformfield_for_foreignkey dla Device, coś

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) 

(jestem zakładając sporo tutaj. Mam nadzieję, że to jasne!)

Podobnie istnieje formfield_for_manytomany.

+0

To jest moja preferowana metoda. –

+1

dziękuję, działa jak widać tutaj: https://github.com/ninuxorg/nodeshot/issues/65 – nemesisdesign

2

Próbowałeś coś takiego:

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

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

Nie znałem tej opcji, +1 za nauczanie mnie czegoś nowego, ale nie sądzę, że rozwiązuje mój problem – nemesisdesign

+0

To rozwiązanie wciąż potrzebuje czegoś takiego, jak wspomniane w odpowiedzi akceptującej, aby uzyskać