Django: создание подклассов моделей. CharField для преобразования значений перед сохранением в / после загрузки из базы данных - PullRequest
3 голосов
/ 22 февраля 2012

У меня есть устаревшая база данных с проблемами кодирования.Я не могу исправить это, не сломав много вещей

Но я все еще хочу разобраться с этим в моем приложении 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')

Firtst Я, хотя это работало, но потом я столкнулся с другой проблемой

Я использую эту модель в ModelForm и form.save, когда она создает модельЭкземпляр из экземпляра формы снова вызывает EncCharField.to_python, но на этот раз с value, закодированным правильно, поэтому мое кодирование-декодирование выдает исключение, и все умирает

Итак.Есть ли способ отличить ситуации, когда модели в инициализированных из БД против формы (или другой действительный объект)?

И второй вопрос, как перекодировать обратно (encode('windows-1251').decode('windows-1252')) до сохранения в базу данных?

...