with usercreationform password contrib auth abstractuser django django-forms django-authentication django-users

usercreationform - Excluir nombre de usuario o contraseña de UserChangeForm en Django Auth



request.user django (2)

No podrá hacer esto si usa UserChangeForm .

Vea esto https://github.com/django/django/blob/master/django/contrib/auth/forms.py .

Notará que UserChangeForm en esta página define explícitamente el username y la password . Estos campos están presentes en la variable declared_fields en el formulario.

exclude y los fields solo funcionan en campos tomados del model definido en Meta . Si define explícitamente un campo, es decir, declared_fields , estarán presentes en el formulario incluso si se han excluido mediante exclude . Entonces, estos campos se muestran para usted.

Para leer más sobre este cheque __new__ de ModelFormMetaclass en https://github.com/django/django/blob/master/django/forms/models.py

Solución:

No use UserChangeForm y lea su código. No te proporciona mucho. Puede escribir su propio formulario que solo se extiende desde ModelForm y establecer Meta Model como usuario. Copie las partes de UserChangeForm en su formulario.

class UserForm(forms.ModelForm): class Meta: model = User def __init__(self, *args, **kwargs): #copy any functionality you want form UserChangeForm def clean_password(self): #copy functionality provided by UserChangeForm

Estoy tratando de encontrar la manera de excluir el nombre de usuario y / o la contraseña de UserChangeForm . Intenté exclude y fields pero no trabajo para estos dos campos.

Aquí hay un código:

class ArtistForm(ModelForm): class Meta: model = Artist exclude = (''user'',) class UserForm(UserChangeForm): class Meta: model = User fields = ( ''first_name'', ''last_name'', ''email'', ) exclude = (''username'',''password'',) def __init__(self, *args, **kwargs): self.helper = FormHelper self.helper.form_tag = False super(UserForm, self).__init__(*args, **kwargs) artist_kwargs = kwargs.copy() if kwargs.has_key(''instance''): self.artist = kwargs[''instance''].artist artist_kwargs[''instance''] = self.artist self.artist_form = ArtistForm(*args, **artist_kwargs) self.fields.update(self.artist_form.fields) self.initial.update(self.artist_form.initial) def clean(self): cleaned_data = super(UserForm, self).clean() self.errors.update(self.artist_form.errors) return cleaned_data def save(self, commit=True): self.artist_form.save(commit) return super(UserForm, self).save(commit)


Creo que puede ser útil ...

mientras iteras sobre el campo de formulario en la plantilla, escribe

if for field in UserChangeFormObject: {% ifnotequal field.lable password %} #process your form field here {% endifnotequal%}

Lea más aquí https://docs.djangoproject.com/en/1.6/releases/1.2/