He agregado un campo adicional para el usuario haciendo todo el proceso en el que se hace la aplicación de perfil de usuario y extendiendo el módulo de usuario.Extendiendo formulario de usuario nuevo, en el administrador Django
Parece que no hay error. Lo que no puedo entender, o encontrar en cualquier lugar es cómo mostrar este nuevo campo en la página donde un administrador crea un nuevo usuario. Por lo tanto, bajo información personal como nombre y apellido, quiero que haya un campo de ubicación que agregué al perfil de usuario.
mi Perfil de Usuario:
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
# This field is required.
user = models.OneToOneField(User)
# Other fields here
location = models.CharField(max_length=20)
# definition of UserProfile from above
# ...
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
También me gustaría saber cómo hacer que el correo electrónico obligatorio, como la contraseña y nombre de usuario. Simplemente cambiando el modelo de usuario en la carpeta Django a:
email = models.EmailField(_('e-mail address'), unique=True)
no funcionó en absoluto.
[ACTUALIZACIÓN] Así que este es mi sombrero admin.py que creé. ¿Dónde debería incluir esto en el archivo settings.py para que realmente use la carpeta con el módulo de usuario agregado y el nuevo formulario? que tienen esta línea pero tampoco parece utilizar la nueva forma del todo AUTH_PROFILE_MODULE = 'UserProfile.UserProfile' (tengo una carpeta llamada PerfilUsuario que contiene los dos snipets de código)
from django.contrib import admin
from django.contrib.auth.models import User,Group
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django import forms
from django.contrib.admin.views.main import *
class MyUserCreationForm(UserCreationForm):
"""
A form that creates a user, with no privileges, from the given username and password.
"""
OFFICES = (
(0, "Global"),
(1, "Dublin"),
(2, "Tokyo"),
(3, "Warsaw"),
(4, "Beijing"),
(5, "Seoul"),
(6, "Taipei"),
(7, "Orem"),
(8, "Mountain View"),
(9, "San Luis Obispo"),
(10, "Roseville"),
(11, "Pune"),
(12, "i18n")
)
username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\[email protected]+-]+$',
help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput,
help_text = _("Enter the same password as above, for verification."))
location = forms.IntegerField(label=_("Location"), choices=TYPE_CHOICES)
class Meta:
model = User
fields = ("username",)
def clean_username(self):
username = self.cleaned_data["username"]
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(_("A user with that username already exists."))
def clean_password2(self):
password1 = self.cleaned_data.get("password1", "")
password2 = self.cleaned_data["password2"]
if password1 != password2:
raise forms.ValidationError(_("The two password fields didn't match."))
return password2
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
class CustomUserAdmin(UserAdmin):
add_form = MyUserCreationForm
inlines = [ProfileInline,]
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('username', 'email', 'password1', 'password2', 'location')}
),
)
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
admin.site.register(Class, ClassAdmin)
Lo siento, sólo estoy tratando de poner en práctica este momento, ya que no tuve tiempo antes y Me estoy confundiendo por todos los enlaces. Supongo que necesito crear un nuevo archivo .py con el código para la clase MyUserAdmin (UserAdmin): que has especificado en http://stackoverflow.com/questions/6628452/how-can-i-have-django-user-registration -single-step-instead-of-two-stepprocess/6630174 # 6630174? – Angie
Sí, puede poner el código en su propio archivo admin.py – Brandon
Actualicé mi código, pero no estoy seguro de cómo hacer que mi sitio web realmente lo use. Hasta ahora, es solo una carpeta con archivos .py que no están vinculados al proyecto principal – Angie