首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django输入验证to_python方法

Django输入验证to_python方法
EN

Stack Overflow用户
提问于 2018-06-06 04:24:31
回答 1查看 494关注 0票数 -1

当在Django中创建一个字段并调用它的clean方法时,您会看到正在调用一个to_python方法。

https://docs.djangoproject.com/en/2.0/ref/forms/fields/#django.forms.Field.required

为什么这个(to_python)方法在返回值时被调用。

代码语言:javascript
复制
def clean(self, value):
    """
    Validate the given value and return its "cleaned" value as an
    appropriate Python object. Raise ValidationError for any errors.
    """
    value = self.to_python(value)
    self.validate(value)
    self.run_validators(value)
    return value


def to_python(self, value):
    return value
EN

回答 1

Stack Overflow用户

发布于 2018-06-06 04:33:10

这是默认的实现。如果您使用更多定制的东西,比如特殊的字段覆盖,那么您可以覆盖对象转换为Python值的方式。Here's the documentation.

它包含一个很好的示例,显示了一个覆盖此方法的类:

代码语言:javascript
复制
def parse_hand(hand_string):
    """Takes a string of cards and splits into a full hand."""
    p1 = re.compile('.{26}')
    p2 = re.compile('..')
    args = [p2.findall(x) for x in p1.findall(hand_string)]
    if len(args) != 4:
        raise ValidationError(_("Invalid input for a Hand instance"))
    return Hand(*args)

class HandField(models.Field):
    # ...

    def from_db_value(self, value, expression, connection):
        if value is None:
           return value
        return parse_hand(value)

    def to_python(self, value):
        if isinstance(value, Hand):
            return value

        if value is None:
            return value

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

https://stackoverflow.com/questions/50708401

复制
相关文章

相似问题

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