python - 如何在 Django 中排除表单中的继承字段?

标签 python django django-forms

我有以下形式和继承形式:

class UsuarioAdminForm(ModelForm):

    first_name = forms.CharField(label='Nombre', help_text = 'Nombre del usuario', required=True)
    last_name = forms.CharField(label='Apellidos', help_text = 'Apellidos del usuario', required=True)
    dni = ESIdentityCardNumberField(help_text = 'DNI del usuario', required=True, widget = forms.TextInput(attrs = {'size': 9}))
    username = forms.CharField(label='Login', help_text = 'Requerido. 30 caracteres o menos. Letras, números y @/./+/-/_', widget = forms.TextInput(attrs = {'size': 15}))
    #password = forms.CharField(widget=forms.PasswordInput(attrs = {'size': 12}), label='Contraseña', help_text = 'Contraseña del usuario')
    email = forms.EmailField(help_text = 'Correo electrónico del usuario', required=True)
    movil = ESPhoneNumberField(help_text = 'Movil principal del usuario', required=True, widget = forms.TextInput(attrs = {'size': 9 }))
    is_staff = forms.BooleanField(label = "Administrador", help_text = 'Marque la casilla si desea crear un administrador')
    tipo_u = forms.ChoiceField(label = 'Tipo de usuario', choices = TipoUsuarios)
    def clean(self):
        try:
            cleaned_data = self.cleaned_data
            movil = self.cleaned_data['movil']
            dni = self.cleaned_data['dni']
            email = self.cleaned_data['email']
        except:
            raise forms.ValidationError(u'Todos los campos del Formulario son Obligatorios.')

        return cleaned_data

    class Meta:
        model = Usuario
        exclude = ('is_active','date_joined', 'last_login', 'user_permissions', 'tipo', 'groups', 'is_superuser', )


class UsuarioForm(UsuarioAdminForm):

    is_staff = None

    def __init__(self, *args, **kwargs):
        self.is_staff = None
        super(UsuarioForm,self).__init__(*args, **kwargs)

    class Meta:
        model = Usuario
        exclude = ('is_staff', 'is_active','date_joined', 'last_login', 'user_permissions', 'tipo', 'groups', 'is_superuser', 'password', )

但是当我创建一个 UsuarioForm 对象时,为什么它会显示 is_staff 字段?

更新:

如果我输入 self.fields['is_staff'] = None 我会得到下一个错误:

TemplateSyntaxError at /sms/usuarios/add/user/

Caught AttributeError while rendering: 'NoneType' object has no attribute 'label'

最佳答案

也许你可以改变这几行的顺序:

def __init__(self, *args, **kwargs):
    super(UsuarioForm,self).__init__(*args, **kwargs)        
    self.is_staff = None

你也可以这样做:

def __init__(self, *args, **kwargs):
    super(UsuarioForm,self).__init__(*args, **kwargs)
    self.fields.pop('is_staff')

关于python - 如何在 Django 中排除表单中的继承字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5378169/

相关文章:

django - 当前登录用户 Django 的查询集

python - django 输入元素错误 css 类

django - 表单中 Django 模型浮点字段的本地化

python - 值在图中看不清楚

Python - 如果 x 不在 a、b、c 中的任何一个中

Django Rest Framework 2.4 类型错误 : __init__() got an unexpected keyword argument 'allow_none'

django - 使用基本身份验证保护一些 Web 路径

django - django中forms.py有什么用

python - 从 Lambda 中的 s3 下载文件

python - SciPy.sparse 迭代求解器 : No sparse right hand side support?