我有一个模型在一个字段中存储不同类型的数据(离散值或连续值)(在另一个字段中存储类型)。在该模型的ModelForm中,我有一个ChoiceField来选择数据项,并使用ChoiceField或DecimalField来设置项目的值。在django管理员表单中响应用户操作?
当我创建表单时,我根据项目的类型设置值的字段。但是,如果我选择不同类型的项目,我想立即更改值字段以匹配。
当窗体仍处于活动状态时,即在用户更改字段值但未单击“提交”按钮时,我无法找到任何方式来响应更改。有没有办法做到这一点?最好留在服务器上的Python,而不是浏览器端在javascript中编码。
ChoiceField的选项取自模型,因此无法在任何地方进行硬编码。
下面是一些代码:
class FooProperty (models.Model):
foo = models.ForeignKey ('foos.Foo')
prop = models.ForeignKey ('foos.FooProperty')
value = models.DecimalField (max_digits=15, decimal_places=6) # is an EnumValue id in the case of discrete values.
class FooPropertyForm (forms.ModelForm):
class Meta:
model = FooProperty
fields = ['prop', 'value']
def __init__(self, *args, **kwargs):
super (FooPropertyForm, self).__init__(*args, **kwargs)
if hasattr (self.instance, 'prop'):
kind = self.instance.prop.units.kind
if kind.id != 1:
values = [(v.id, v.name) for v in EnumValues.objects.filter (kind=kind.id)]
self.fields ['value'] = forms.ChoiceField (choices=values, required=True)
self.initial['value'] = int(self.instance.value) # using initial= above doesn't work.
else:
# keep the default field.
pass