Django模型表单-排除没有模型字段的字段
我有一个通过管理界面使用的简单模型表单。我的一些模型字段存储需要更多时间计算的数据(它们来自其他站点)。因此,我决定在表单中添加一个额外的布尔字段,以决定是否再次对这些数据进行爬网Django模型表单-排除没有模型字段的字段,django,django-forms,django-models,Django,Django Forms,Django Models,我有一个通过管理界面使用的简单模型表单。我的一些模型字段存储需要更多时间计算的数据(它们来自其他站点)。因此,我决定在表单中添加一个额外的布尔字段,以决定是否再次对这些数据进行爬网 class MyModelForm(forms.ModelForm): update_values = forms.BooleanField(required=False) #this field has no model field class Meta: model = MyMo
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存在,我还尝试动态添加该字段,但没有成功
你知道怎么做吗
感谢您的回答。您可以对表单进行子类化,并在子类中添加额外字段:
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\u form
方法,该方法将传递给当前实例:get\u form(self,request,obj=None,**kwargs)
而不是删除\uu init\uuuuu
中的字段。如果instance.pk不是None,如果它不是None,如何添加它?删除类级声明,只需更改逻辑:
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)
我已经试过了。不知道为什么,但在这种情况下,管理界面不会显示它。谢谢,伙计,它现在似乎工作了!在get_表单中,我必须执行以下操作:
如果obj和obj.pk:self.form=MyModelUpdateForm,则执行以下操作:self.form=MyModelForm