动态更改django模型';s字段返回值

动态更改django模型';s字段返回值,django,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(UnitsOfMea

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

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。 我如何做到可用数量返回5.50而不是5.5000000000

我知道我可以使用property decorator,但这并不能解决我的问题,因为我想使用Quantity\u作为表单中的字段

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


非常感谢你的想法

覆盖模型字段的
\uuuu init\uuu
方法,并根据相关测量单位设置
最大位数

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

如果只是演示问题,您可以在模板中使用
simple_标记

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

这不适用于表单字段。如果这是一种方法,您最好创建一个模型属性,而不是模板标记“Fat”模型,您是对的。谢谢但正如你所说的,我还是没有抓住问题的关键。这只解决了模型形式的问题。在模板上显示一个值怎么样?然后我需要自定义模板过滤器。。。如果我想在这个字段中使用不同的形式,该怎么办?然后我不得不一遍又一遍地重复这个代码。。。听起来不太干…您可以使用属性或模板标记进行演示。如果您需要多个表单,那么您应该能够使用继承来减少重复的代码。这可能不像你喜欢的那样枯燥,你可以用自定义字段做一些更聪明的事情,但我不确定它是否会像你喜欢的那样简单易懂。