[英]Django: Slicing form data before “form.is_valid”
我有一个ModelForm,它为类Person
保存并创建一个新对象。 此类Person
具有一个称为is_adult
的attr。 它的值是model.CharField
,其中max_length=1
,我只保存值Y
或N
(是/否)。
问题在于此attr呈现为“ Select
HTML”字段。 在此“选择”字段中,可用选项为“是”和“否”,因此,当表单作为POST方法发送时,其值为2-3个长度的CharField,但其Model attr的max_length为1,因此在检查if form.is_valid()
之前,我需要先切片这两个选项。 否则,该表单将不被接受,因为它的发布值为2-3个字符,并且预期为1个字符。
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”,而不是“ Yes”或“ No”。 我尝试使用Python语法is对其字符串进行切片,但是在“ form.is_valid”中被拒绝之前,我无法获得form字段值。 有什么办法吗? 谢谢!
标记为重复,但是您应该使用选择表单字段 。
将您的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应该这样呈现(注意options values
):
<select>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
看到重复的问题: 如何将Django的表单框架用于选择选项?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.