Django - 如何在保存文本到数据库之前修改它?
我想在管理页面输入一些内容,比如:
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'
(字符字段)。
我想要什么呢?
- 把
't(es)t'
当作一个字符串变量使用。 - 把
'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)