我有一個模型在一個字段中存儲不同類型的數據(離散值或連續值)(在另一個字段中存儲類型)。在該模型的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