动态改变django模型的字段返回值

时间:2013-09-27 13:35:03

标签: django

假设我有类似的设置:

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作为字段。

自定义字段类型?我怎样才能传递和访问相关的模型实例呢?

非常感谢你的想法!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果只是演示文稿问题,您可以在模板中使用simple_tag

@register.simple_tag
def format_qty_available(product):
    return product.qty_available.quantize(Decimal(10) ** -product.uom.precision)