假设我有类似的设置:
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作为字段。
自定义字段类型?我怎样才能传递和访问相关的模型实例呢?
非常感谢你的想法!
答案 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)