我有一个简单的模型形式,我通过管理界面使用。我的一些模型字段存储需要更多时间来计算的数据(它们来自其他站点)。所以我决定在表单中添加一个额外的布尔字段来决定是否再次抓取这些数据。
class MyModelForm(forms.ModelForm):
update_values = forms.BooleanField(required=False) #this field has no model field
class Meta:
model = MyModel
模型中不存在此额外字段,因为只有表单需要它。
问题是我只希望它出现在数据库中的现有记录中。
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
if self.instance.pk is None:
#remove that field somehow
我几乎尝试了一切。排除它,删除变量但没有想要工作。如果self.instance.pk存在但我也尝试动态添加字段,但这也不起作用。
知道如何做到这一点吗?
感谢您的回答。
答案 0 :(得分:1)
您可以对表单进行子类化,并在子类中添加额外字段:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
class MyUpdateModelForm(MyModelForm):
update_values = forms.BooleanField(required=False) #this field has no model field
class Meta:
model = MyModel
然后,您可以覆盖管理员的get_form
方法,该方法会传递给当前实例:get_form(self, request, obj=None, **kwargs)
答案 1 :(得分:0)
如果instance.pk不是None,而不是删除__init__
中的字段,如果是,则添加它怎么样?删除类级声明,只需更改逻辑:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk is not None:
self.fields['update_values'] = forms.BooleanField(required=False)