gpt4 book ai didi

python - Django ModelForm 可以显示存储值的自定义表示吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:55 25 4
gpt4 key购买 nike

在我的模型中,百分比数据存储为 0.0-1.0 范围内的分数值。因为它们是百分比,所以我希望用户查看和编辑 0.0-100.0 范围内的值。

存储值显示值之间转换数据的首选方式是什么?请注意,格式取决于另一个实例变量。

我的模型是这样的:

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)

在表单中,我尝试将显示属性用作表单字段,但这不起作用(为 MyModel 指定的未知字段(my_value_display)):

class MyForm(forms.ModelForm):

class Meta:
model = MyModel
fields = ('my_value_display', )

最佳答案

就个人而言,我可能会尝试创建一个 django.forms.FloatField 子类和一个 django.forms.TextInput 子类,有点像这样:

class PercentageInput(TextInput):
def render(self, name, value, attrs=None):
try:
value = float(value)
value *= 100
except ValueError:
pass
return super(PercentageInput, self).render(name, value, attrs)

class PercentageField(FloatField):
widget = PercentageInput
def to_python(self, value):
value = super(PercentageField, self).to_python(value)
return value / 100

然后以这种方式定义您的 ModelForm:

class MyForm(forms.ModelForm):
my_value = PercentageField()

它可能会在一些极端情况下失败,也可能在用户提供无效值时失败,但基本思路应该没问题。

关于python - Django ModelForm 可以显示存储值的自定义表示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7076329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com