我有一个ModelForm,它为我的类Person
保存并创建一个新对象。
此类Person
具有一个称为is_adult
的属性。
它的值是带有model.CharField
的{{1}},我只保存值max_length=1
或Y
(是/否)。
问题在于此attr呈现为N
HTML字段。在此“选择”字段中,可用选项为“是”和“否”,因此,当表单作为POST方法发送时,其值为2-3个长度的CharField,但其Model attr的max_length为1,因此我需要在 检查Select
之前对这两个选项进行切片。否则,该表单将不被接受,因为它的发布值为2-3个字符,并且预期为1个字符。
models.py:
if form.is_valid()
choices.py:
class Person(models.Model):
is_adult = models.CharField(max_length=1, null=False, choices=ADULT_CHOICES, default='N')
forms.py:
ADULT_CHOICES= (
(0, 'No'),
(1, 'Yes'),
)
当然,views.py期望的是“ Y”或“ N”,而不是“ Yes”或“ No”。 我尝试使用Python语法is对其字符串进行切片,但是在“ form.is_valid”中被拒绝之前,我无法获得form字段值。 有什么办法吗?谢谢!
答案 0 :(得分:0)
标记为重复,但是您应该使用choice form field。
将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>
看到重复的问题:How do I use Django's form framework for select options?