货币字段和z3c.form支持。
项目描述
一个实现货币字段的软件包,用于 zope.schema,并支持使用该字段与 z3c.form。
详细文档
货币字段
货币字段是一个数值字段,专门设计用于管理货币值。
>>> from z3c.currency import field, interfaces>>> price = field.Currency( ... title='Price', ... description='The price of the item.')
除了常见的属性外,货币字段还提供了两个附加属性,精度和单位。精度用于指定值是提供的整数单位还是整个单位的1/100 - 在美元和分的情况下。默认情况下,此字段设置为分。
>>> price.precision is interfaces.CENTS True
它可以设置为美元
>>> price.precision = interfaces.DOLLARS >>> price.precision is interfaces.DOLLARS True
对于财务应用,我们有时还需要子分
>>> price.precision = interfaces.SUBCENTS >>> price.precision is interfaces.SUBCENTS True
注意:是否有更“国际化”的词来表示货币的整个单位?
单位指定了所使用货币的符号。它也用于将数值格式化为字符串。
>>> price.unit '$' >>> price.unit = 'SEK' >>> price.unit 'SEK'
当然,这两个属性都可作为构造函数参数使用
>>> price = field.Currency( ... title='Price', ... description='The price of the item.', ... precision=interfaces.DOLLARS, ... unit='SEK')>>> price.precision is interfaces.DOLLARS True >>> price.unit 'SEK'
现在让我们看看验证。首先,值必须始终是十进制数
>>> import decimal >>> price.validate(decimal.Decimal('12'))>>> price.validate(12) Traceback (most recent call last): ... z3c.currency.interfaces.WrongCurrencyType: int>>> price.validate(12.0) Traceback (most recent call last): ... z3c.currency.interfaces.WrongCurrencyType: float
此外,当精度设置为“美元”时,就像这里的情况,值必须是一个整数。
>>> price.validate(decimal.Decimal('12'))>>> price.validate(decimal.Decimal('12.01')) Traceback (most recent call last): ... z3c.currency.interfaces.IncorrectValuePrecision: 0>>> price.validate(decimal.Decimal('12.00')) Traceback (most recent call last): ... z3c.currency.interfaces.IncorrectValuePrecision: 0
当精度设置为“分”时,
>>> price.precision = interfaces.CENTS
则只接受有两位小数的值。
>>> price.validate(decimal.Decimal('12.00'))>>> price.validate(decimal.Decimal('12')) Traceback (most recent call last): ... z3c.currency.interfaces.IncorrectValuePrecision: 1>>> price.validate(decimal.Decimal('12.0')) Traceback (most recent call last): ... z3c.currency.interfaces.IncorrectValuePrecision: 1
如果我们允许小于分的金额,
>>> price.precision = interfaces.SUBCENTS
则允许任何精度。
>>> price.validate(decimal.Decimal('12.0')) >>> price.validate(decimal.Decimal('12')) >>> price.validate(decimal.Decimal('12.00001'))
如果该字段不是必需的,…
>>> price.required = False
确保验证仍然通过。
>>> price.validate(None)
请注意,IFromUnicode接口是故意不支持的。
>>> price.fromUnicode Traceback (most recent call last): ... AttributeError: 'Currency' object has no attribute 'fromUnicode'
z3c.form 支持
此包还提供与 z3c.form 包的集成支持。特别是它实现了一个从 Currency 字段到接受 Unicode 字符串的任何小部件的数据转换器。
>>> from z3c.currency import converter >>> conv = converter.CurrencyConverter(price, None) >>> conv <DataConverter from Currency to NoneType>
转换器可以轻松地将任何值转换为字符串。
>>> conv.toWidgetValue(decimal.Decimal(12)) '12' >>> conv.toWidgetValue(decimal.Decimal(1200)) '1,200' >>> conv.toWidgetValue(decimal.Decimal(-12)) '-12' >>> conv.toWidgetValue(decimal.Decimal('-12.0')) '-12.00' >>> conv.toWidgetValue(decimal.Decimal('-12.00')) '-12.00'
请注意,始终打印两位小数。您还可以将精度设置为“美元”。
>>> conv.field.precision = interfaces.DOLLARS>>> conv.toWidgetValue(decimal.Decimal(12)) '12' >>> conv.toWidgetValue(decimal.Decimal('12.00')) '12'
让我们也尝试小于分的金额。
>>> conv.field.precision = interfaces.SUBCENTS>>> conv.toWidgetValue(decimal.Decimal('12.00')) '12.00' >>> conv.toWidgetValue(decimal.Decimal('12')) '12' >>> conv.toWidgetValue(decimal.Decimal('12.0001')) '12.0001'
如果值缺失,则优雅地处理。
>>> conv.toWidgetValue(None) ''
现在让我们解析一个值。解析器有一定的灵活性,不仅接受输出值,…
>>> conv.field.precision = interfaces.CENTS >>> conv.toFieldValue('12') Decimal('12.00') >>> conv.toFieldValue('1,200') Decimal('1200.00') >>> conv.toFieldValue('-12') Decimal('-12.00') >>> conv.toFieldValue('-12.00') Decimal('-12.00')>>> conv.field.precision = interfaces.DOLLARS >>> conv.toFieldValue('12') Decimal('12') >>> conv.toFieldValue('12.00') Decimal('12')>>> conv.field.precision = interfaces.SUBCENTS >>> conv.toFieldValue('12') Decimal('12') >>> conv.toFieldValue('12.00') Decimal('12.00') >>> conv.toFieldValue('12.0000') Decimal('12.0000') >>> conv.toFieldValue('12.0001') Decimal('12.0001')
还接受其他输入值。
>>> conv.toFieldValue('1200') Decimal('1200')
如果浏览器发送一个空字符串,则优雅地处理。
>>> conv.toFieldValue('')
变更记录
2.0 (2023-02-08)
放弃对 Python 2.7、3.5、3.6 的支持。
添加对 Python 3.8、3.9、3.10、3.11 的支持。
放弃使用 python setup.py test 运行测试的过时支持。
1.2.0 (2018-11-14)
Python 3.6 和 3.7 支持。放弃 Python 2.6。
测试现在使用 python setup.py test 运行。
1.1.1 (2015-11-09)
标准化命名空间 __init__。
1.1.0 (2013-09-27)
添加了新的精度值“sub-cents”(interfaces.SUBCENTS),这允许超过便士的精度,这对于金融和其他商业应用是必需的。
1.0.0 (2013-08-16)
更新了 Trove 分类器。
将代码移动到 GitHub。
将验证改为抛出自定义验证错误,因为上游代码查看异常的文档字符串而不是第一个参数。
改进了转换器,
确保初始解析后的十进制精度正确。
将值格式化为正确的精度。
将 ICurrency 接口中的“精度”字段改为选择,以便 UI 生成的效果更好。
稍微整理了代码。
0.1.0 (2007-09-12)
初始发布
实现了支持精度和单位的 Currency 字段。
实现了数据转换器。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
z3c.currency-2.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 38e11ee70ac5a441b086f40abf3af01ee8060fb46a255df59f368856493cf900 |
|
MD5 | 732bdd09a80d5cb116e61072aa59e953 |
|
BLAKE2b-256 | 429a1bd5701fb87f7b81c6792a47a5a849142aff78b20c1a066eb4058ed3d823 |
z3c.currency-2.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 888b5c5866224ffbab1ff5beec501a80374dfc73aeab5d06c6a69db8132780ba |
|
MD5 | 0368dd8a43640184ec37b4b09d6336e1 |
|
BLAKE2b-256 | b8d5ce4f02eb9c5ebcf76280a1486935c112f8dcf372d3bc2d3b0c0fffb644fb |