0
在我的模型中,百分比数据作为小数值存储在0.0-1.0范围内。由于它们是百分比,我希望用户查看和编辑0.0-100.0范围内的值。Django ModelForm可以显示存储值的自定义表示吗?
在存储值和显示值之间转换数据的首选方式是什么?请注意,格式取决于另一个实例变量。
我的模型看起来是这样的:
class MyModel(models.Model):
format = models.CharField(choices=(('percentage', 'Percentage'), ('absolute', 'Absolute'))
my_value = models.FloatField()
def _get_my_value_display(self):
if self.format == 'percentage':
return self.my_value * 100
else:
return self.my_value
def _set_my_value_display(self, v):
if self.format == 'percentage':
return v/100
else:
return self.my_value
my_value_display = property(_get_my_value, _set_my_value)
在表单中,我试图用显示属性为表单域,但不工作(指定未知领域(S)(my_value_display)为MyModel):
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('my_value_display',)
如果格式是有条件的,并且基于'format'实例变量(如示例中),会发生什么? – Frederik
在这种情况下,可以通过覆盖表单的“干净”方法来实现表单的清理部分。我真的不知道小部件怎么样。也许创建两个不同的'ModelForm'类,然后在模型上有一个方法根据格式的值检索正确的类。 – koniiiik
你在渲染功能中缺少“return”关键字 –