1

这是给我的 Django 同志们的。

我正在尝试在 Django 1.6.5 和 MySQL 中构建一个应用程序,其中一些数据库字段被加密以尊重用户的隐私。我已成功安装django-extensions并成功使用EncryptedCharField来进行简单的保存和数据检索。

但是,我在使用EncryptedCharField浮点数时遇到了问题。现在,简单的类型转换很有用——这个问题似乎不是那个问题。我试图从一个作为值的加密字段开始,通过添加/减去一些数字来更改值,然后将其保存回数据库。我已经设法减少和重现这样的错误:

>>> user_id = 1
>>> account = AccountCash.objects.get( id = 1 )
>>> account.id
1L
>>> account.portfolio_id
1L
>>> account.account_name
u'My Cash'
>>> account.current_value
u'200'
>>> account.current_value = account.current_value - 10
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'unicode' and 'int'

在这里,account_namecurrent_value都是EncryptedCharFields。我们看到这current_value是一个 unicode,所以类型转换为float应该(我认为)解决问题,就像在其他地方对我一样。

但是,这样做会导致另一个问题

>>> account.current_value = float(account.current_value) - 10
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/jasonnett/anaconda/envs/bb_env/lib/python2.7/site-packages/django/db/models/fields/subclassing.py", line 35, in __set__
    obj.__dict__[self.field.name] = self.field.to_python(value)
  File "/Users/jasonnett/anaconda/envs/bb_env/lib/python2.7/site-packages/django_extensions/db/fields/encrypted.py", line 69, in to_python
    elif value and (value.startswith(self.prefix)):
AttributeError: 'float' object has no attribute 'startswith'

我无法弄清楚将浮点值分配给此处的加密字段与我最初设置值的位置有什么不同:

        # Make the new account, passing in the portfolio it belongs to
        new_account = AccountCash(
            portfolio                   = portfolio,
            account_name                = newCashAccountForm.cleaned_data['account_name'],
            starting_balance            = newCashAccountForm.cleaned_data['starting_balance'],
            current_value               = newCashAccountForm.cleaned_data['starting_balance'],
        )
        new_account.save()
4

0 回答 0