我有一个ModelForm,它为我的类Person保存和创建一个新对象。这个类Person有一个名为is_adult的攻击。它的值是带有model.CharField的max_length=1,其中我只保存值Y或N (是/否)。
问题是,此攻击被呈现为一个Select HTML字段。在这个选择字段中,可用的选项是“是”和“否”,因此当表单作为POST方法发送时,它的值为2-3长度的CharField,但是它的Model的max_length为1,所以在检查if form.is_valid()之前,我需要分割这两个选项。否则,表单将不被接受,因为它的值为2-3个字符,并且它需要一个字符。
models.py:
class Person(models.Model):
is_adult = models.CharField(max_length=1, null=False, choices=ADULT_CHOICES, default='N')choices.py:
ADULT_CHOICES= (
(0, 'No'),
(1, 'Yes'),
)forms.py:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ["is_adult"]
widgets = {
'is_adult': forms.Select(attrs={'class': 'form-control'}),
}
labels= {
'is_adult': 'Is an adult?',
}当然,views.py期待'Y‘或'N',而不是’是‘或’否‘。我试图将它的字符串与Python语法分割,但是在表单字段值在"form.is_valid“中被拒绝之前,我无法得到它的值。有解决办法吗?谢谢!
发布于 2019-02-02 14:42:44
标记为重复,但您应该使用选择形式字段。
将您的forms.py更改为:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ["is_adult"]
labels= {
'is_adult': 'Is an adult?',
}模型表单的默认行为应该使用form.ChoiceField,它应该自动将选择选项(在HTML中)设置为正确的'Y‘和'N’值。
您不需要分割任何东西,因为Django应该为您处理这个问题。
当使用ChoiceField时,您的HTML应该呈现如下(注意选项values):
<select>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>见重复问题:如何使用Django的表单框架来选择选项?
https://stackoverflow.com/questions/54493655
复制相似问题