繁体   English   中英

Django:在“ form.is_valid”之前切片表单数据

[英]Django: Slicing form data before “form.is_valid”

我有一个ModelForm,它为类Person保存并创建一个新对象。 此类Person具有一个称为is_adult的attr。 它的值是model.CharField ,其中max_length=1 ,我只保存值YN (是/否)。

问题在于此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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM