Django:子类化models.CharField,用于在保存到数据库之前/之后转换值

时间:2012-02-22 06:08:09

标签: python django forms custom-component subclassing

我有一个包含编码问题的旧数据库。我不能在没有破坏很多东西的情况下修复它

但是我还是想在我身边的django应用程序(django 1.2)中处理它

我认为继承CharField会是一个很棒的主意,所以我做了:

class EncCharField(models.CharField):
    __metaclass__ = SubfieldBase

    def to_python(self, value):
        v = super(EncCharField, self).to_python(value)
        return v.encode('windows-1252').decode('windows-1251')

最新我虽然有效,但后来又遇到了另一个问题

我在ModelFormform.save中使用此模型,当它从表单实例创建模型实例时,再次调用EncCharField.to_python,但这次正确编码value,所以我的编码解码会抛出一个异常并且所有死掉

因此。有没有办法区分从DB与Form(或其他有效的对象)初始化模型时的情况?

第二个问题,如何在保存到数据库之前重新编码(encode('windows-1251').decode('windows-1252'))?

0 个答案:

没有答案