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

7 投票
1 回答
4968 浏览
提问于 2025-04-18 07:42

我想在管理页面输入一些内容,比如:

text = 't(es)t'

然后把它们保存为:

'test'

在数据库里。

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

re.sub(r'(.*)\({1}(.*)\){1}(.*)', r'\1\2\3', text)

我知道怎么把文本从 't(es)t' 转换成 'test',但问题是

当我使用

name = models.CharField(primary_key=True, max_length=16)

来输入文本(从管理页面)。它会立刻保存到数据库,不能在保存之前进行修改。

最后,从管理员输入的单个内容 text = 't(es)t'(字符字段)。

我想要什么呢?

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

1 个回答

19

试着在你的模型中重写保存方法,

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)

更新:

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)

撰写回答