Django模型如何保存已清除的数据?

时间:2019-01-30 01:40:37

标签: django django-models

我已经看到了一些零碎的内容,但是很难将它们放在一起。假设我有一个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)

如果某个地方错过了一个很好的教程,请告诉我。谢谢。

1 个答案:

答案 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], ...)

表示,如果要在保存之前或之后修改模型实例。看一下pre_savepost_save信号。