2010-12-31 26 views

Odpowiedz

73
class SeminarInline(admin.StackedInline): 
    model = Seminar 
    extra = 0 
    ordering = ('-date',) 

pracował dla mnie (powyżej zaadaptowany z moim modelu) To sortowane malejąco daty zamówienia

+1

Zarówno ta, jak i odpowiedź @Marcus Whybrow rozwiązuje problem. Pytanie brzmi, czy ktoś chce ograniczyć sortowanie domyślne tylko do widoku administratora, czy też do innych widoków. –

12

Możesz dodać Meta opcje Model Django, który może dyktować, jak się zachowuje. Dostępna jest opcja ordering określająca, które rekordy atrybutów modelu powinny być zamawiane.

można znaleźć w dokumentacji meta opcji zamawiania here in the Django docs:

+0

Czy nie jest to odpowiedź, której szukasz? –

+0

Widzę, że Wgar Lylo mówi ... Mam ten sam problem ... [a, b, c, d] .. Chcę być w stanie pozwolić administratorowi zmienić kolejność danych bez polegania na polu ... [d, c, a, b] na przykład – Lee

+1

Idealne rozwiązanie! Przykład [tutaj] (https://docs.djangoproject.com/en/dev/topics/db/models/#meta-options) – Roger

7

Jeśli chcesz określić kolejność w obrębie InlineAdmin Django nie oferują rodzajowe rozwiązanie to zrobić! Istnieją some snippets out there, które umożliwiają dodanie tej funkcji do administratora, a także grappelli skin oferuje taką funkcję!

4

Istnieje również możliwość, aby zastąpić get_ordering(self, request) z ModelAdmin który pozwala na przypadek niewrażliwego zamawiającego:

from django.db.models.functions import Lower 

class MyModelAdmin(ModelAdmin): 
    list_display = ('name',) 
    search_fields = ['name'] 

    def get_ordering(self, request): 
     return [Lower('name')] # sort case insensitive 
+0

Myślę, że 'return [Lower ('name')]' powinno być 'return [self.name.lower()]'. – LostMyGlasses

+0

@LostMyGlasses nie, na pewno nie chcesz obniżać nazwy pola, ale wartości używane do sortowania. – Risadinha

+0

W porządku, dodany "import" oferuje teraz nowe informacje. – LostMyGlasses