我试图在Django中创建一个自定义字段,该字段将采用十进制货币值(示例:1.56英镑)并将其保存为整数(示例:156)以存储货币值。
这就是我目前所拥有的(我已经将固定值进行了测试)
class CurrencyField(models.DecimalField):
__metaclass__ = models.SubfieldBase
def get_internal_type(self):
return 'PositiveIntegerField'
def to_python(self, value):
print "CurrentField to_python"
return Decimal(value)/100
def get_db_prep_value(self, value, connection, prepared=False):
print "CurrentField get_db_prep_value"
if value is None:
return value
print type(value)
return int(value*100)
我正在跟踪Python 1.7 documentation for creating custom model fields。
在上面的代码中,当我使用此字段保存模型时,永远不会调用get_db_prep_value
方法。to_python
方法工作正常(如果我在数据库中手动输入值,它将返回正确的十进制数),但是它永远不会保存正确的值。
我也试过使用get_prep_value
,结果是一样的。
如何使它保存正确的值?
Integer based MoneyField
我使用这个Django片段已经有一段时间了,但是后来意识到在保存数据库之前,它在转换为整数时引入了浮点工件。
另外,从Django 1.9SubfieldBase has been deprecated开始,我们应该使用Field.from_db_value。所以我编辑了代码来解决这两个问题。
相关问题 更多 >
编程相关推荐