2016-10-20 5 views
0

Djangoプロジェクトでカスタムユーザモデルを使用しようとしています。移行を実行すると、データベーステーブルの名前はaccounts_listuserとなりますが、Djangoはaccounts_userを探しているようです。これを変更するにはどうすればDjangoはaccounts_listuserではなく、ユーザモデルの正しいテーブル(accounts_user)を調べますか?私のsettings.pyでDjangoがカスタムユーザモデルの正しいテーブル名を検索しない

# Auth user models 
AUTH_USER_MODEL = 'accounts.User' 
AUTHENTICATION_BACKENDS = (
    'accounts.authentication.PersonaAuthenticationBackend' 
) 

アカウント/ models.pyファイル:

class User(models.Model): 
    email = models.EmailField(primary_key=True) 
    last_login = models.DateTimeField(default=timezone.now) 
    REQUIRED_FIELDS =() 
    USERNAME_FIELD = 'email' 
    is_authenticated = True 
    is_anonymous = False 

とクエリが失敗したファイル(アカウント/ authentication.py):

from django.contrib.auth import get_user_model 

User = get_user_model() 

# .. user's email retrieved .. 

    def get_user(self, email): 
     try: 
      return User.objects.get(email=email) 
     except User.DoesNotExist: 
      return None 

完全なソースコードcan be found hereが役立ちます。

答えて

1

この場合はcorrect tableの意味がわかりませんが、この動作はモデルと呼ばれ、アカウントという名前のアプリで宣言されているため正しく動作します。あなたはクラスMeta属性db_table使用して自動生成されたテーブル名を上書きすることができます

:また、ちょうどノートhttps://docs.djangoproject.com/en/1.10/ref/models/options/#db-table

を、Djangoのドキュメントは、そうでない場合、あなたはかなりの実装を担当する、カスタム・ユーザー・モデルはAbstractBaseUserから継承することをお勧めしますあなた自身でいくつかのことを。 https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#specifying-a-custom-user-model

+2

優れた答えです。もう少し詳しい情報を追加するだけです:AbstractBaseUserから継承する場合は、これらのユーザーの一部に管理者アクセスなどが必要な場合は、PermissionsMixinも継承することをお勧めします。 –

関連する問題