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

时间:2014-05-27 11:14:29

标签: python regex database django sqlite

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

text = 't(es)t'

并将其另存为:

'test'

在数据库上。

我使用这个Regex来修改它们:

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

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

当我使用

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

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

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

我想要什么?

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

1 个答案:

答案 0 :(得分:6)

尝试覆盖模型中的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)

<强>更新

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)