class AESTextField(models.CharField):

    def value_to_string(self, obj):
        """序列化"""
        value = self.value_from_object(obj)
        return self.get_prep_value(value)

    def to_python(self, value):
        if value is not None:
            try:
                value = AES.new('key').decrypt(value)
            except Exception as e:
                logger.exception(f'密码解密失败:{e}')
        return value

    def from_db_value(self, value, expression, connection):
        """从数据库取出来的值"""
        if value is not None:
            try:
                value = AES.new('key').decrypt(value)
            except Exception as e:
                logger.exception(f'密码解密失败:{e}')
        return value

    def get_prep_value(self, value):
        if value is not None:
            try:
                value = AES.new('key').encrypt(value)
            except Exception as e:
                logger.exception(f'密码加密失败:{e}')
        return value

    def value_from_object(self, obj):
        return super().value_from_object(obj)

    def get_db_prep_value(self, value, connection, prepared=False):
        return super().get_db_prep_value(value, connection, prepared)

    def get_db_prep_save(self, value, connection):
        return super().get_db_prep_save(value, connection)