2014-10-10 71 views
8

我用抽象模型在Django,如:Django admin:我可以定義字段順序嗎?

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) 

並從抽象模型中的所有領域第一個去Django的管理面板:

parent: 
abstract_field2: 
title: 
model_field2: 
... 

有沒有辦法把它們(從抽象類的字段的方式)在列表的最後?
或更一般的方式來定義字段的順序?

回答

16

您可以使用ModelAdmin.fields選項根據需要訂購字段。

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

另外要提https://github.com/django-mptt/django-mptt – Sergey 2014-10-11 19:33:38

+0

字段的順序取決於您在模型中聲明它們的順序。所以或者您可以按照您希望他們在管理員中顯示的方式來訂購這些字段。 – acquayefrank 2017-03-07 17:13:55

+0

@larry在問題中,'parent'來自父模型'Tree','title'來自子模型'Genre',所以無法通過更改模型中的順序來更改管理員的順序。 – Alasdair 2017-03-07 17:25:45

0

我知道這是一個老問題,但希望在我的兩個美分,至thow,因爲我的使用情況是完全一樣的,但我有很多的車型,從一個類繼承,所以不想寫爲每個管理員輸出字段。相反,我擴展了get_form模型並重新排列了字段,以確保父項始終位於管理面板中用於添加/更改視圖的字段的末尾。

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是一個OrderedDict,所以這會將「父」鍵附加到末尾。 接着,延伸該管理員爲您希望家長在年底出現的任何類:如果你需要一個樹狀結構

class GenreAdmin(BaseAdmin): 
    pass 
+0

哦,我應該添加這是python 2.7。在python 3中,使用form.base_fields.move_to_end('parent')更簡單 – rbennell 2017-12-20 16:58:41

相關問題