2009-07-31 7 views
7

webappではユーザー名にダッシュ「 - 」を付ける必要がありました。 私は「[\ W - ]^+ $」 Rにこの正規表現とその消費者のサインアッププロセスのためにうまく有効にしたユーザーには>私は認証にユーザ名を編集できるようにDjango管理インターフェースのユーザー名に「 - 」文字を付ける

がどのように管理アプリを伝えることができますユーザー名に " - "文字を使用できますか?現在、ユーザー名の検証エラーが返されるため、ダッシュを含むユーザー名を編集できません。

可能であれば、djangoに直接パッチを当てないようにしたいと思います。 私はかなりプログラミングに新しいですが、これは私が "サブクラス化"を使用するものですか?

答えて

18

これは、User ModelAdminクラスの動作をオーバーライドするだけで簡単です。いずれかのアプリでは、admin.pyに次のコードが含まれています。

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) 

ここでは少し説明します。

最初のクラス定義(MyUserCreationForm)は、UserCreationFormのサブクラスです(専門用語が正しい)。これは、Django管理者サイトの「ユーザの追加」をクリックすると表示されるフォームです。ここでは、usernameフィールドを改良したハイフンを受け入れる正規表現を使用して再定義し、これを反映するようにhelptextを変更しています。

2番目のクラス定義は、UserChangeFormを除いて同じです。

最終的なクラス定義はUserAdminのサブクラスで、UserAdminがデフォルトで使用するModelAdminです。ここでは、ModelAdminで新しいカスタムフォームを使用したいと述べています。

これらのサブクラスごとに、私たちが持つものを変更するだけであることに注意してください。残りのクラスは親から継承されます(それぞれUserCreationForm、UserChangeForm、およびUserAdmin)。

最後に、管理者サイトにUserモデルを登録する重要な手順を実行します。これを行うために、デフォルトのUserAdminの登録を解除して、改良されたMyUserAdminクラスに登録します。

Djangoの管理サイトは、管理サイトが通常のDjangoアプリケーションであることを考慮すると、これらの手法を使用して簡単にカスタマイズできます。

+0

sixgearさん、ありがとうございました、それは私にはたくさんの意味があります、詳細な説明を書く時間をとっていただきありがとうございます。 –

+1

非常に良い説明。 –

関連する問題