Django - 如何在将文本保存到数据库之前修改文本?

fro*_*hem 2 python regex database sqlite django

我想输入类似的东西(通过管理页面):

text = 't(es)t'
Run Code Online (Sandbox Code Playgroud)

并将它们保存为:

'test'
Run Code Online (Sandbox Code Playgroud)

在数据库上.

我使用这个正则表达式来修改它们:

re.sub(r'(.*)\({1}(.*)\){1}(.*)', r'\1\2\3', text)
Run Code Online (Sandbox Code Playgroud)

我知道如何将文本转换为't(es)t','test'但问题是

当我使用

name = models.CharField(primary_key=True, max_length=16)
Run Code Online (Sandbox Code Playgroud)

输入文本(来自管理员).它立即保存到数据库,保存前无法修改它.

最后,来自admin text = 't(es)t'(CharField)的单个输入.

我想要什么?

  1. 要使用't(es)t'作为一个字符串变量.
  2. 保存'test'到数据库

dha*_*ana 7

尝试覆盖模型中的save方法,

class Model(model.Model):
    name = models.CharField(primary_key=True, max_length=16)

    # This should touch before saving
    def save(self, *args, **kwargs):
        self.name = re.sub(r'(.*)\({1}(.*)\){1}(.*)', r'\1\2\3', self.name)
        super(Model, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

更新:

class Model(model.Model):
        name = models.CharField(primary_key=True, max_length=16)
        name_org = models.CharField(max_length=16)

        # This should touch before saving
        def save(self, *args, **kwargs):
            self.name = re.sub(r'(.*)\({1}(.*)\){1}(.*)', r'\1\2\3', self.name)
            self.name_org = self.name # original "t(es)t"
            super(Model, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)