Django ModelForm:排除不在Model中的字段

时间:2017-09-17 07:54:05

标签: python django django-forms

我很难调试这个。我想在扩展的confirm_password RegModelForm中排除modelform UpdateRegModelForm。我曾尝试在exclude的Meta类中使用UpdateRegModelForm,但在渲染confirm_password时它似乎显示UpdateRegModelForm。不知道如何前进。

class RegModelForm(forms.ModelForm):

    org_admin_email = forms.CharField(
        label='If you know who should be the Admin, please add their email address below.'
              ' We\'ll send them an email inviting them to join the platform as the organization admin.',
        required=False,
        widget=forms.EmailInput(attrs=({'placeholder': 'Email'}))
    )
    organization_name = forms.CharField(
        max_length=255,
        label='Organization Name',
        widget=forms.TextInput(
            attrs={'placeholder': 'Organization Name'}
        )
    )

    confirm_password = forms.CharField(
        label='Confirm Password', widget=forms.PasswordInput(attrs={'placeholder': 'Confirm Password'})
    )

    class Meta:
        model = ExtendedProfile

        fields = (
            'confirm_password', 'first_name', 'last_name',
            'organization_name', 'is_currently_employed', 'is_poc', 'org_admin_email',
        )

        labels = {
            'is_currently_employed': "Check here if you're currently not employed.",
            'is_poc': 'Are you the Admin of your organization?'
        }

        widgets = {
            'first_name': forms.TextInput(attrs={'placeholder': 'First Name'}),
            'last_name': forms.TextInput(attrs={'placeholder': 'Last Name'}),
            'is_poc': forms.RadioSelect()
        }


class UpdateRegModelForm(RegModelForm):
    class Meta(RegModelForm.Meta):
        exclude = ('confirm_password',)

1 个答案:

答案 0 :(得分:2)

fieldsexclude属性仅与从模型创建的字段相关。由于您已直接在表单中指定confirm_password,因此始终存在。

删除它的方法是从表单的fields字典中删除它。您可以使用__init__方法执行此操作:

class UpdateRegModelForm(RegModelForm):
    def __init__(self, *args, **kwargs):
        super(UpdateRegModelForm, self).__init__(*args, **kwargs)
        self.fields.pop('confirm_password')

您根本不需要在此子类中定义Meta。