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