2014-10-10 17 views
8

używam abstrakcyjnych modeli w Django jak:Administrator Django: czy mogę zdefiniować kolejność pól?

class Tree(models.Model): 
    parent = models.ForeignKey('self', default=None, null=True, blank=True, 
           related_name="%(app_label)s_%(class)s_parent") 

    class Meta: 
     abstract = True 

class Genre(Tree): 
    title = models.CharField(max_length=150) 

I wszystkie pola z teoretycznego modelu iść pierwszy w panelu administracyjnym Django:

parent: 
abstract_field2: 
title: 
model_field2: 
... 

Czy istnieje sposób, aby ich (pola z klasami abstrakcyjnymi umieścić) na końcu listy?
Lub bardziej ogólny sposób definiowania kolejności pól?

Odpowiedz

16

Możesz zamówić pola według swoich potrzeb, używając opcji ModelAdmin.fields.

class GenreAdmin(admin.ModelAdmin): 
    fields = ('title', 'parent') 
+0

ma również wspomnieć https://github.com/django-mptt/django-mptt jeśli trzeba strukturę drzewa – Sergey

+0

Kolejność pól zależy od kolejności ich deklaracji w modelach. Alternatywnie możesz zamówić pola w taki sposób, w jaki chcesz je wyświetlać w panelu administratora. – acquayefrank

+0

@ W pytaniu "rodzic" pochodzi z modelu macierzystego 'Drzewo', a' tytuł' pochodzi z modelu potomnego 'Gatunek', więc nie można zmienić kolejności w kreatorze, zmieniając kolejność w modelach . – Alasdair

0

Wiem, że to stare pytanie, ale chciał thow w moich dwóch centów, ponieważ mój przypadek użycia było dokładnie tak, ale miałem wiele modeli dziedziczących z jednej klasy, więc nie chcę pisać pola dla każdego administratora. Zamiast tego wydłużyłem model get_form i przestawiłem pola, aby zapewnić, że rodzic zawsze pojawia się na końcu pól w panelu administracyjnym w celu dodania/zmiany widoku.

class BaseAdmin(admin.ModelAdmin): 
    def get_form(self, request, obj=None, **kwargs): 
     form = super(BaseAdmin, self).get_form(request, obj, **kwargs) 
     parent = form.base_fields.pop('parent') 
     form.base_fields['parent '] = parent 
     return form 

base_fields to uporządkowany dokument, więc dołącza on klucz "rodzica" do końca. Następnie przedłużyć ten admin wszelkich klas, gdzie chcesz rodzic pojawiać się na końcu:

class GenreAdmin(BaseAdmin): 
    pass 
+0

oh, powinienem dodać to jest python 2.7. W Pythonie 3 jest jeszcze łatwiej, używając form.base_fields.move_to_end ("parent") – rbennell

Powiązane problemy