首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:在"form.is_valid“之前对表单数据进行切片

Django:在"form.is_valid“之前对表单数据进行切片
EN

Stack Overflow用户
提问于 2019-02-02 13:46:39
回答 1查看 282关注 0票数 1

我有一个ModelForm,它为我的类Person保存和创建一个新对象。这个类Person有一个名为is_adult的攻击。它的值是带有model.CharFieldmax_length=1,其中我只保存值YN (是/否)。

问题是,此攻击被呈现为一个Select HTML字段。在这个选择字段中,可用的选项是“是”和“否”,因此当表单作为POST方法发送时,它的值为2-3长度的CharField,但是它的Model的max_length为1,所以在检查if form.is_valid()之前,我需要分割这两个选项。否则,表单将不被接受,因为它的值为2-3个字符,并且它需要一个字符。

models.py:

代码语言:javascript
复制
class Person(models.Model):
    is_adult = models.CharField(max_length=1, null=False, choices=ADULT_CHOICES, default='N')

choices.py:

代码语言:javascript
复制
ADULT_CHOICES= (
        (0, 'No'),
        (1, 'Yes'),
)

forms.py:

代码语言:javascript
复制
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“中被拒绝之前,我无法得到它的值。有解决办法吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-02-02 14:42:44

标记为重复,但您应该使用选择形式字段

将您的forms.py更改为:

代码语言:javascript
复制
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):

代码语言:javascript
复制
<select>
  <option value="Y">Yes</option>
  <option value="N">No</option>
</select>

见重复问题:如何使用Django的表单框架来选择选项?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54493655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档