我已经看到了一些零碎的内容,但是很难将它们放在一起。假设我有一个model
和一个field
:
class MyModel(models.Model):
my_field = models.CharField(...)
我想从my_field
中删除所有“ x”并保存:
def clean(self):
x_less = self.my_field.replace('x', '')
如何使x_less
进入save
方法?或如何保存cleaned
数据?
def save(self, *args, **kwargs):
self.my_field = x_less #??????
super().save(*args, **kwargs)
如果某个地方错过了一个很好的教程,请告诉我。谢谢。
答案 0 :(得分:1)
您必须从清理方法中返回:
def remove_x(self):
x_less = self.my_field.replace('x', '')
return x_less
并在save方法中分配返回值:
def save(self, *args, **kwargs):
self.my_field = self.remove_x()
super().save(*args, **kwargs)
让用户提供一些输入,然后在没有事先警告的情况下更改该输入,将导致不良的用户体验。
以下是您的示例用例:如果您不希望在输入中输入x
,请为该字段提供一个验证器:
def x_validator(value):
if 'x' in value:
raise ValidationError(
"x character is no allowed.",
params={'value': value}
)
class MyModel(models.Model):
my_field = models.CharField(validators=[x_validator], ...)