0

假设我有一个类似的设置:

class UnitsOfMeasure(models.Model):
    name = models.CharField(max_length=40)
    precision = models.PositiveIntegerField()

class Product(models.Model):
    name = models.CharField(max_length=100)
    uom = models.ForeignKey(UnitsOfMeasure)
    qty_available = models.DecimalField(max_tigits=10, decimal_places=10)

现在假设我们有一个与精度 = 2 的计量单位实例相关的产品。我怎样才能使 qty_available 返回 5.50 而不是 5.5000000000?

我知道我可以使用属性装饰器,但这并不能解决我的问题,因为我想使用 qty_available 作为表单中的字段。

自定义字段类型?那我该如何传递和访问相关的模型实例呢?

非常感谢您的想法!

4

2 回答 2

1

覆盖__init__模型字段的方法并max_digits根据相关的度量单位设置。

class ProductForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ProductForm, self).__init__(*args, **kwargs)
        self.fields['qty_available'] = models.DecimalField(max_digits=10, decimal_places=self.instance.uom.precision)
    class Meta:
        model = Product
于 2013-09-27T13:48:30.017 回答
0

如果这只是一个演示问题,您可以simple_tag在模板中使用 a:

@register.simple_tag
def format_qty_available(product):
    return product.qty_available.quantize(Decimal(10) ** -product.uom.precision)
于 2013-09-27T13:56:26.453 回答