2017-06-20 17 views
0

私はいくつかの定義済みの値を選択できるモデルを持っています。Django ModelFormウィジェットの選択肢の値を置き換えます。

in models.py 

class Customer(models.Model): 
    GENDER = (('m' , 'Male') , ('f' , 'Female')) 
    PersonGender = models.CharField(max_length=20,choices=GENDER) 

と私は私のフォームを処理するためのModelFormを持っている、それは大丈夫だが、私はいくつかの理由で「GENDER」の値を変更するには、別のModelFormを定義したいです。

私は、新しい値に変更この設定ドロップダウンメニューでforms.py

GENDER = (('male' , 'Male'), ('female' , 'Female')) 
class MySecondaryForm(forms.ModelForm): 
     class Meta: 
      model = Customer 
      fields = '__all__' 
      widgets = { 
       'PersonGender': forms.Select(choices=GENDER) 
      } 

で別のModelFormを定義していません。私の新しいに上記の設定ドロップダウン値の変化と

GENDER = (('male' , 'Male'), ('female' , 'Female')) 
class MySecondaryForm(forms.ModelForm): 
    PersonGender = forms.ChoiceField(choices=GENDER) 
    class Meta: 
     model = Customer 
     fields = '__all__' 

を、しかし、私はそれが「ウィジェット」にメタクラス内で変更する方法を知りたい:

私は、以下の設定でそれを修正することができますか?

答えて

0

forms.pyとmodel.pyにGENDERを定義しないでください。 models.pyで定義するだけです。

class MySecondaryForm(forms.ModelForm): 
    class Meta: 
     model = Customer 

は、フォームには十分です。あなたがPythonでできる最悪の事は、あなたが必要としないものを使用していることです。ここで説明するように、多分、これはオプションになりますあなたのコメントにについて

:既に定義models.pyで、この資料

def get_my_choices(): 
    # you place some logic here 
    return choices_list 

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['my_choice_field'] = forms.ChoiceField(
      choices=get_my_choices()) 
+0

GENDERから

http://www.ilian.io/django-forms-choicefield-with-dynamic-values/ 

引用符で囲まれたコード、私はこの中を上書きしたいですforms.pyとMetaウィジェットの属性の中にあります。 – Arash

+0

答えの変更を参照してください – mbieren

+0

はい、私は "def"メソッドと私が質問で言及した別の方法で値を置き換えることができます知っているが、私は他のを保持するメタクラス内のウィジェットを定義する方法を知りたい必要なものや助けのテキストなどのモデルで定義された要素。 – Arash

関連する問題