2009-07-31 17 views
7

W naszej aplikacji webowej musieliśmy zezwolić na myślniki "-" w nazwach użytkowników. mam włączone, że dla procesu rejestracji konsumentów dobrze z tym regex r „^ [\ w -] + $”Zezwalanie na znak "-" w nazwach użytkowników w interfejsie administratora Django

Jak mogę powiedzieć aplikacji administratora tak, że mogę zmieniać nazw użytkowników w auth> użytkownikom zezwala na znak "-" w nazwach użytkowników? Obecnie nie można edytować żadnych nazw użytkownika za pomocą myślników, ponieważ zwrócą one błąd sprawdzania poprawności nazwy użytkownika.

Chciałbym spróbować, jeśli to możliwe, unikać łatania django bezpośrednio. Jestem dość nowy w programowaniu, ale czy to jest to, co chciałbym użyć "podklasy" dla?

Odpowiedz

18

Powinno to być tak proste, jak nadpisanie zachowania klasy UserAdministrator. W jednej z aplikacji w pliku admin.py uwzględnij następujący kod.

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) 

Oto małe wyjaśnienie.

Pierwsza definicja klasy (MyUserCreationForm) jest podklasą (tak, Twoja terminologia jest poprawna) z UserCreationForm. Jest to formularz, który pojawia się po kliknięciu "Dodaj użytkownika" w witrynie Django Admin. Wszystko, co tutaj robimy, zmienia na nowo pole username, aby użyć naszego ulepszonego, akceptującego łączniki wyrażeń regularnych i zmienić wartość tego parametru na helptext.

Druga definicja klasy robi to samo, z wyjątkiem UserChangeForm.

Ostateczna definicja klasy jest podklasą UserAdmin, która jest ModelAdminem, którego domyślnie używa Model użytkownika. Tutaj stwierdzamy, że chcemy użyć naszych nowych niestandardowych formularzy w ModelAdmin.

Należy zauważyć, że dla każdej z tych podklas, zmienimy tylko to, co musimy. Reszta klasy zostanie odziedziczona po rodzicu (odpowiednio: UserCreationForm, UserChangeForm i UserAdmin).

Wreszcie, wykonujemy ważny krok rejestracji modelu użytkownika w serwisie admin. W tym celu wyrejestrujemy domyślny UserAdmin, a następnie zarejestrujemy się w naszej ulepszonej klasie MyUserAdmin.

Przekonasz się, że strona administratora Django jest bardzo łatwa do dostosowania przy użyciu tych technik, szczególnie biorąc pod uwagę, że strona admin jest zwykłą aplikacją Django.

+0

Dziękuję sixthgear, to ma dla mnie wiele sensu, dziękuję za poświęcenie czasu, aby napisać szczegółowe wyjaśnienie. –

+1

Bardzo dobre wytłumaczenie. –

Powiązane problemy