У меня есть устаревшая база данных с проблемами кодирования.Я не могу исправить это, не сломав много вещей
Но я все еще хочу разобраться с этим в моем приложении 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')
) до сохранения в базу данных?