Django模型如何保存已清理的数据?
我已经看到了其中的点点滴滴,但是我很难把它们全部放在一起。假设我有一个带有Django模型如何保存已清理的数据?,django,django-models,Django,Django Models,我已经看到了其中的点点滴滴,但是我很难把它们全部放在一起。假设我有一个带有字段的模型: class MyModel(models.Model): my_field = models.CharField(...) 我想删除my_字段中的所有“x”并保存它: def clean(self): x_less = self.my_field.replace('x', '') 如何使x_less进入save方法?或者如何保存清理后的数据 def save(self, *args, **
字段的模型
:
class MyModel(models.Model):
my_field = models.CharField(...)
我想删除my_字段中的所有“x”并保存它:
def clean(self):
x_less = self.my_field.replace('x', '')
如何使x_less
进入save
方法?或者如何保存清理后的数据
def save(self, *args, **kwargs):
self.my_field = x_less #??????
super().save(*args, **kwargs)
如果有一个好的教程,我错过了什么地方,请让我知道。谢谢。更新:
您必须从clean方法返回:
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
s出现在输入中,请为该字段提供验证器:
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], ...)
也就是说,如果要在保存之前或之后修改模型实例。查看到和信号。我正在使用它从数字中删除分组标记,以节省数据库中的空间。我在str方法中重新分配这些标记。因为数字是一个设定的长度,它会在中的标记处抛出一个max_length错误。@CarlBrubaker,为了回答您的确切问题,我发布了一个更新,但我真的鼓励您查看post_save pressave_信号。另外,您应该在点击模型之前清理数据,可能是在表单的clean方法中?最后一个问题,这不会影响模型上的其他字段,对吗?@CarlBrubaker不会,但请注意,在我的回答中,我将方法名称从clean
更改为remove\x
,因为clean是一种用于验证的models.Model
方法。