Пользовательское поле to_python не работает? - Джанго - PullRequest
12 голосов
/ 21 октября 2010

Я пытаюсь реализовать зашифрованное поле char.


Я использую pydes для шифрования

Вот что у меня есть:

from pyDes import triple_des, PAD_PKCS5
from binascii import unhexlify as unhex
from binascii import hexlify as dohex

class BaseEncryptedField(models.CharField):

    def __init__(self, *args, **kwargs):
        self.td = triple_des(unhex('c35414909168354f77fe89816c6b625bde4fc9ee51529f2f'))
        super(BaseEncryptedField, self).__init__(*args, **kwargs)

    def to_python(self, value):
        return self.td.decrypt(unhex(value), padmode=PAD_PKCS5)

    def get_db_prep_value(self, value):
        return dohex(self.td.encrypt(value, padmode=PAD_PKCS5))

Поле успешно зашифровано в базе данных

но при выходе на пенсию дешифрованная версия не распечатывается


Есть идеи?

1 Ответ

16 голосов
/ 21 октября 2010

Вы забыли установить метакласс:

class BaseEncryptedField(models.CharField):

    __metaclass__ = models.SubfieldBase

    ... etc ...

Поскольку документация объясняет, , to_python вызывается только при использовании метакласса SubfieldBase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...