Saltar al contenido

Django crea un formulario de creación de usuario personalizado

Después de mucho trabajar hemos encontrado el resultado de esta dificultad que ciertos los usuarios de nuestra web han tenido. Si tienes algún detalle que compartir no dejes de dejar tu información.

Solución:

No existe tal campo llamado fullname en el modelo de Usuario.

Si desea almacenar el nombre utilizando el modelo original, debe almacenarlo por separado como nombre y apellido.

Editar: Si desea solo un campo en el formulario y aún usa el modelo de usuario original, use lo siguiente:

Puedes hacer algo como esto:

from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User

class RegisterForm(UserCreationForm):
    email = forms.EmailField(label = "Email")
    fullname = forms.CharField(label = "First name")

    class Meta:
        model = User
        fields = ("username", "fullname", "email", )

Ahora debe hacer lo que manji ha dicho y anular el método de guardar, sin embargo, dado que el modelo de usuario no tiene un campo de nombre completo, debería verse así:

def save(self, commit=True):
        user = super(RegisterForm, self).save(commit=False)
        first_name, last_name = self.cleaned_data["fullname"].split()
        user.first_name = first_name
        user.last_name = last_name
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

Nota: Debe agregar un método limpio para el campo de nombre completo que garantice que el nombre completo ingresado contenga solo dos partes, el nombre y el apellido, y que tenga caracteres válidos.

Código fuente de referencia para el modelo de usuario:

http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/models.py#L201

tienes que anular UserCreationForm.save() método:

    def save(self, commit=True):
        user = super(RegisterForm, self).save(commit=False)
        user.fullname = self.cleaned_data["fullname"]
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/forms.py#L10

En Django 1.10 esto es lo que escribí en admin.py para agregar primer nombre, Email y apellido hacia usuario por defecto de django formulario de creación

from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib import admin
from django.contrib.auth.models import Group, User

# first unregister the existing useradmin...
admin.site.unregister(User)

class UserAdmin(BaseUserAdmin):
    # The forms to add and change user instances
    # The fields to be used in displaying the User model.
    # These override the definitions on the base UserAdmin
    # that reference specific fields on auth.User.
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
    fieldsets = (
    (None, 'fields': ('username', 'password')),
    ('Personal info', 'fields': ('first_name', 'last_name', 'email',)),
    ('Permissions', 'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')),
    ('Important dates', 'fields': ('last_login', 'date_joined')),)
    # add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
    # overrides get_fieldsets to use this attribute when creating a user.
    add_fieldsets = (
    (None, 
        'classes': ('wide',),
        'fields': ('username', 'email', 'first_name', 'last_name', 'password1', 'password2')),)
    list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups')
    search_fields = ('username', 'first_name', 'last_name', 'email')
    ordering = ('username',)
    filter_horizontal = ('groups', 'user_permissions',)

# Now register the new UserAdmin...
admin.site.register(User, UserAdmin)

Reseñas y puntuaciones del tutorial

Si te animas, puedes dejar un artículo acerca de qué te ha gustado de esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *