当在Django中创建一个字段并调用它的clean方法时,您会看到正在调用一个to_python方法。
https://docs.djangoproject.com/en/2.0/ref/forms/fields/#django.forms.Field.required
为什么这个(to_python)方法在返回值时被调用。
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
发布于 2018-06-06 04:33:10
这是默认的实现。如果您使用更多定制的东西,比如特殊的字段覆盖,那么您可以覆盖对象转换为Python值的方式。Here's the documentation.
它包含一个很好的示例,显示了一个覆盖此方法的类:
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)
https://stackoverflow.com/questions/50708401
复制相似问题