<p><code>floatformat</code>希望其参数是可以转换为<code>Decimal</code>实例的内容,而不是表单字段。<code>form.price_retail</code>是一个表单域实例(具体来说是<code>DecimalField</code>)。在</p>
<p><code>DecimalField</code>确实接受<a href="https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.DecimalField.decimal_places" rel="nofollow">^{<cd6>}</a>参数,但这是为了输入验证,而不是对现有值进行舍入。在</p>
<p>我认为您需要自己<a href="http://docs.python.org/2/library/decimal.html#decimal.Decimal.quantize" rel="nofollow">^{<cd7>}</a>值—可能是在表单的<code>__init__</code>方法中,也可能是在子类字段类型中,甚至是自定义小部件中—或者自己呈现输入元素,这样就可以直接在HTML <code>input</code><code>value</code>属性上使用<code>floatformat</code>。我认为最简单的方法是在<code>__init__</code>中执行,如下所示:</p>
<pre><code>class ProductForm(forms.ModelForm):
# Meta as above
def __init__(self, *args, **kwargs):
if 'instance' in kwargs:
kwargs['instance'].price_retail = kwargs['instance'].price_retail.quantize(Decimal('0.01'))
super(ProductForm, self).__init__(*args, **kwargs)
self.fields['price_retail'].widget.attrs['class'] = 'input-price'
self.fields['price_retail'].decimal_places = 2
</code></pre>
<p>当然,您可以使用任何您喜欢的舍入策略,如文档所述用于量化。在</p>
<p>我认为如果您提交表单而不进行编辑,这实际上不会改变<code>price_retail</code>值,因为字段看起来与初始值没有变化。但我还没有测试过。在</p>