【问题标题】:Django - How can i modify text before save them to database?Django - 如何在将文本保存到数据库之前修改它们?
【发布时间】:2014-07-16 06:43:29
【问题描述】:

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

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' (CharField) 的单个输入。

我想要什么?

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

【问题讨论】:

标签: python regex database django sqlite


【解决方案1】:

尝试覆盖模型中的保存方法,

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)

【讨论】:

  • 如果我在name 下还有其他属性该怎么办。 save 方法会影响我的另一个属性吗?
  • 不,它不会影响其他属性。它是保存方法的自定义。如果您想在使用此方法保存之前做任何事情。
  • 我能再问你一个问题吗?如何将原始文本 t(es)t 保存到名为 name_org 的变量中,以便以后在此类中使用它?
  • @terces907 我已经更新了我的答案。如果有用,请接受我的回答。
猜你喜欢
  • 2021-08-22
  • 2021-06-26
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多