我有一个模型,让我可以在一些预定义的值之间进行选择。
in models.py
class Customer(models.Model):
GENDER = ( ('m' , 'Male') , ('f' , 'Female') )
PersonGender = models.CharField(max_length=20,choices=GENDER)
我有一个ModelForm来处理我的表单,没关系,但我想定义另一个ModelForm To Change" GENDER"由于某些原因的价值观。
我在forms.py
中定义了另一个ModelFormGENDER = (('male' , 'Male' ), ('female' , 'Female') )
class MySecondaryForm(forms.ModelForm):
class Meta:
model = Customer
fields = '__all__'
widgets = {
'PersonGender': forms.Select(choices=GENDER)
}
使用此配置下拉菜单不会更改为新值。
我可以使用以下配置修复它:
GENDER = (('male' , 'Male' ), ('female' , 'Female') )
class MySecondaryForm(forms.ModelForm):
PersonGender = forms.ChoiceField(choices=GENDER)
class Meta:
model = Customer
fields = '__all__'
以上配置下拉值更改为我的新,但我想知道如何在"小部件"中的元类内更改它?
答案 0 :(得分: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/
本文引用的代码
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() )