我正在将调查从Form
转换为Django 1.6.2中的ModelForm
,但我在为ChoiceField
选择正确的字段类型时遇到问题。调查是使用SessionWizardView实现的。
我的问题是:使用ModelForm将以下代码重写到我的models.py中的正确方法是什么?
forms.py
class SurveyFormA(forms.Form):
MALE = 'M'
FEMALE = 'F'
SEX = (
("", "----------"),
(MALE, "Male"),
(FEMALE, "Female"),
)
sex = forms.ChoiceField(widget=forms.Select(), choices=SEX, initial= "", label='What sex are you?', required = False)
以下是我的尝试,但是通过阅读除了ChoiceField
之外的每个模型字段列出相应表单字段的documentation,我并非100%确定我是正确的。
forms.py
class SurveyFormA(forms.ModelForm):
class Meta:
model = Person
fields = ['sex']
models.py
class Person(models.Model):
MALE = 'M'
FEMALE = 'F'
SEX = (
(MALE, "Male"),
(FEMALE, "Female"))
sex = models.ForeignKey('Person', related_name='Person_sex', null=True, choices=SEX, verbose_name='What sex are you?')
这是对的吗?
答案 0 :(得分:0)
不,这不正确。看看Django's choices
documentation。
替换你的行
sex = models.ForeignKey('Person', related_name='Person_sex',
null=True, choices=SEX, verbose_name='What sex are you?')
与
sex = models.CharField(max_length=1, choices=SEX,
verbose_name='What sex are you?', null=True)
存储在数据库中的值将是" F"或" M",但Django将展示"女性"或者"男性"在ModelForm
中。对此here有一个很好的解释。