2016-10-15 8 views
1

いくつかのフィールドを隠すために新しいオブジェクトを作成するときに私の管理フォームを変更しましたが、アルファベット順にフィールドを注文しています。Djangoは形式が整えられていない

_add_fields = ('name', 'size', 'slug', 
       'img', 'description', 'quantity') 

def get_form(self, request, obj=None, **kwargs): 
    model_form = super(ItemAdmin, self).get_form(
     request, obj, **kwargs 
    ) 

    if obj is None: 
     model_form._meta.fields = self._add_fields 
     model_form.base_fields = { 
      field: model_form.base_fields[field] 
      for field in self._add_fields 
     } 

    return model_form 

答えて

1

あなたはそれを達成するためにcollectionsモジュールからOrderedDictを使用する必要があります。

from django.contrib import admin 
from collections import OrderedDict 


class ItemAdmin(admin.ModelAdmin): 

    _add_fields = ('name', 'category', 
        'img', 'description', 'quantity') 

    def get_form(self, request, obj=None, **kwargs): 
     model_form = super(ItemAdmin, self).get_form(
      request, obj, **kwargs 
     ) 

     if obj is None: 
      model_form._meta.fields = self._add_fields 
      d = OrderedDict() 
      for field in self._add_fields: 
       d[field] = model_form.base_fields[field] 
      model_form.base_fields = d 
     return model_form 
関連する問題