Django用户详细信息内联表单集,排除字段并确保填充1个内联表单

2024-09-27 22:27:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想排除CustomUser modelform中的一个字段,该字段应该是BaseInlineFormset的一部分。我尝试了:

class CustomUserForm(forms.ModelForm):
    model = CustomUser

    class Meta:
        exclude = ('send_creation_mail',)

    def clean(self):
        cleaned_department = self.cleaned_data['department'] 
        cleaned_report_to = self.cleaned_data['report_to'] 
        # count = 0
        if cleaned_department is None:
            raise forms.ValidationError('Department is mandatory')

        if cleaned_report_to is None:
            raise forms.ValidationError('Report to is mandatory')

class CustomUserFormSet(BaseInlineFormSet):
    model = CustomUser
    form = CustomUserForm

    def __init__(self, *args, **kwargs):
        super(CustomUserFormSet, self).__init__(*args, **kwargs)
        for form in self.forms:
            form.empty_permitted = False

    def clean(self):
        # get forms that actually have valid data
        count = 0
        for form in self.forms:
            try:
                if form.cleaned_data and not form.cleaned_data.get(
                    'DELETE', False):
                    count += 1
                    if form.cleaned_data.get('department') is None:
                        raise forms.ValidationError('Department is mandatory')
                    if form.cleaned_data.get('report_to') is None:
                        raise forms.ValidationError('Reporting is mandatory')

            except AttributeError:
                # annoyingly, if a subform is invalid Django explicity raises
                # an AttributeError for cleaned_data
                pass
        if count < 1:
            raise forms.ValidationError('At least one detail is mandatory')


class CustomUserInline(admin.TabularInline):
    formset = CustomUserFormSet

如果我在CustomUserInline类中使用CustomUserForm,它肯定会排除属性“send_creation_mail”,但在保存用户表单时,它会引发一个异常:

^{pr2}$

我想确保在将用户详细信息保存到django管理员身份验证之前至少填写了1个内联表单。使用form=CustomUserForm,在CustomUserFormSet类中没有任何效果,因为CustomUserForm显示模型的所有字段(不包括“send_creation_mail”)。我需要详细的代码来说明哪里出错了?在


Tags: toselfreportformdataifisforms

热门问题