2016-12-30 2 views
1

私はdjango登録パッケージを使用してdjangoウェブサイトを作っています。ユーザーが自分の電子メールに登録してユーザー名を持たないようにして、実際の名前(facebookのような)を持つインターフェイスを持ち、電子メールでそれらの情報を追跡できるようにしたいと思います。djangoのユーザー名とメールアドレスは同じですか?

私はユーザープロファイルが必要で、後でoneToOneフィールドを使用してユーザーモデルを拡張する予定ですが、現在はユーザー名として電子メールを使用する方法がわかりません。私は、単純にユーザーの電子メールを要求し、それをユーザー名として保存することもできると考えていました。ただし、すべてのフォームを変更する必要があり、データベースには基本的に重複する列(email = username)が作成されます。

この質問は本当に公開されています。私は、プロジェクトの途中でユーザーモデルを変更する簡単な方法があるかどうかを知りたいと思います。 User(AbstractUser)クラスのドキュメントを読んだことがありますが、プロジェクトを開始したばかりの場合にのみ有効です。

ありがとうございました、ありがとうございます。

答えて

1

あなたはAbstractBaseUserを拡張してカスタム・ユーザー・クラスを作成し、同じようUSERNAME_FIELDとして電子メールフィールドを宣言することができます。AbstractBaseUserはあなたのapps.pyでインポートユーザーのモデルとなり得るので、延長せずに周り

USERNAME_FIELD = 'email' 

別の仕事をし、同じようUSERNAME_FIELD設定します:

from django.contrib.auth.models import User 
User.USERNAME_FIELD = 'email' 
+0

もう少し詳しく説明してください、私はまだかなり失われています。これは本当に簡単で直感的な修正のようですが、私はそれを正しく実装できません。ありがとう! –

+0

'django.contrib.auth.models.User'は、ユーザを一意に識別するために' username'を使います。この振る舞いを無効にするには、 'django.contrib.auth.models.User'の一意の' email'フィールドを使用して 'USERNAME_FIELD'とマークするカスタム認証バックエンドを書くか、カスタムユーザーを書くかの2つのオプションがあります'AbstractUser'クラスを継承してモデルを作成します。私はあなたが認証バックエンドで混乱したくない場合は、カスタムユーザモデルを書くことをお勧めします。 – Darshit

関連する問題