Esto debería ser tan simple como anular el comportamiento de la clase User ModelAdmin. En una de sus aplicaciones, en admin.py
incluya el siguiente código.
from django.contrib import admin
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class MyUserCreationForm(UserCreationForm):
username = forms.RegexField(
label='Username',
max_length=30,
regex=r'^[\w-]+$',
help_text = 'Required. 30 characters or fewer. Alphanumeric characters only (letters, digits, hyphens and underscores).',
error_message = 'This value must contain only letters, numbers, hyphens and underscores.')
class MyUserChangeForm(UserChangeForm):
username = forms.RegexField(
label='Username',
max_length=30,
regex=r'^[\w-]+$',
help_text = 'Required. 30 characters or fewer. Alphanumeric characters only (letters, digits, hyphens and underscores).',
error_message = 'This value must contain only letters, numbers, hyphens and underscores.')
class MyUserAdmin(UserAdmin):
form = MyUserChangeForm
add_form = MyUserCreationForm
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
Aquí hay una pequeña explicación.
La primera definición de clase (MyUserCreationForm) es una subclase (sí, su terminología es correcta) de UserCreationForm. Esta es la forma que aparece al hacer clic en "Agregar usuario" en el sitio de Administración de Django. Todo lo que estamos haciendo aquí es redefinir el campo username
para usar nuestra expresión regular mejorada que acepta guiones y cambiar el helptext
para reflejar esto.
La segunda definición de clase hace lo mismo, excepto UserChangeForm.
La definición de clase final es una subclase de UserAdmin, que es el ModelAdmin que el modelo de usuario usa por defecto. Aquí indicamos que deseamos utilizar nuestros nuevos formularios personalizados en ModelAdmin.
Tenga en cuenta que para cada una de estas subclases, solo cambiamos lo que tenemos que hacer. El resto de la clase se heredará de su padre (UserCreationForm, UserChangeForm y UserAdmin, respectivamente).
Finalmente, realizamos el importante paso de registrar el modelo de usuario con el sitio de administración. Para hacerlo, anulamos el registro de UserAdmin por defecto y luego nos registramos con nuestra clase mejorada MyUserAdmin.
Descubrirá que el sitio de administración de Django es muy fácil de personalizar con estas técnicas, especialmente si se tiene en cuenta que el sitio de administración es solo una aplicación de Django.
Gracias sexto, eso tiene mucho sentido para mí, gracias por tomarse el tiempo para escribir la explicación detallada. –
Muy buena explicación. –