2017-06-20 100 views
0

我有一個模型讓我可以選擇一些預定義的值。Django替換ModelForm Widget中的選項值

in models.py 

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

和我有一個的ModelForm來處理我的形式,它的確定,但我想定義另一個的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中最糟糕的事情是使用你不需要的東西。

關於你的評論,也許這裏描述的,這將是一個選項:

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

引用代碼

性別在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

,我想重寫此forms.py和Meta widgets屬性中。 – Arash

+0

看到修改的答案 – mbieren

+0

是的,我知道我可以通過「def」方法和另一種方式來代替問題中提到的值,但我想知道在Meta類中定義小部件的方法,它保留其他在模型中定義的元素,如所需的或幫助文本或.... – Arash