2016-10-14 7 views
0

新しいオブジェクトを作成するときにフィールド名を非表示にしたいが、このオブジェクトを編集したい場合は表示する必要があります。 私は除外メソッドを試しましたが、このフィールドを編集しようとするとフィールドが見えなくなります。例えば私はステータスフィールドを隠したいと思う。あなたはget_form(self, request, obj=None, **kwargs)メソッドをオーバーロードすることができ、あなたのadmin.pyファイルに登録し、モデル管理者で新しいオブジェクトを作成するときにDjango hideフィールド

class Toys(BaseModel): 
    name = models.CharField(max_length=255) 
    tags = models.ManyToManyField(Tag, related_name='Item_tags') 
    price = models.CharField(max_length=255) 
    status = models.BooleanField(default=False) 
+0

一つの方法は、CSSのUSIを使用して隠れていますngクラス名 – karthikr

+0

私はdjango管理パネルでこのフィールドを非表示にします。他の方法? –

答えて

1

。あなたがobj引数を受け取るのが分かるように、それはNoneがadd(変更時にはNoneではない)にのみあります。 そこから、obj is Noneの場合にのみフォームフィールド "name"を除外するフォームを使いこなすことができます。

Django 1.10では、その方法はdjango.contrib.admin.options.ModelAdmin.get_formです。

EDIT 1これは、これまでで最高のソリューションではありません) 私はここにあなたの完全な解決策を与えることはできませんが、あなたのような何かを始めることができます:

# admin.py 

from django.contrib import admin 

from models import Toys 


class ToysModelAdmin(admin.ModelAdmin): 

    def get_form(self, request, obj=None, **kwargs): 
     # all the code you have in the original 
     # django.contrib.admin.options.ModelAdmin.get_form 
     # up to the last try except 

     if obj is not None: 
      defaults['fields'] = ('tags', 'price', 'status',) 

     try: 
      return modelform_factory(self.model, **defaults) 
     except FieldError as e: 
      raise FieldError(
       '%s. Check fields/fieldsets/exclude attributes of class %s.' 
       % (e, self.__class__.__name__) 
      ) 

admin.site.register(Toys, ToysModelAdmin) 

EDIT 2それを行うにはこれが良い例です)

# admin.py 

from collections import OrderedDict 

from django.contrib import admin 

from models import Toys 


class ToysModelAdmin(admin.ModelAdmin): 

    # this is not perfect as you'll need to keep track of your 
    # model changes also here, but you won't accidentally add 
    # a field that is not supposed to be editable 
    _add_fields = ('tags', 'price', 'status',) 

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

     if obj is None: 
      model_form._meta.fields = self._add_fields 
      model_form.base_fields = OrderedDict(**[ 
       (field, model_form.base_fields[field]) 
       for field in self._add_fields 
      ]) 

     return model_form 
+0

あなたは例で私を見せてもらえますか?私は例 –

+0

で私の質問を編集しました。私の編集2をチェックして、簡単にテストしました。 – McAbra

+0

アルファベット順にフィールド名を並べ替えるのはどうすればいいですか? –

関連する問題