2017-09-18 4 views
0

私はdjango 1.10.5を使用して認証システムを作成しています。私はユーザ名の代わりに電子メールをユニークな識別子として使用しています。私はこれらの命令私は私の設定でカスタムユーザーモデルを追加/Self/register/noにそのようなテーブルのOperationalErrorを修正する方法:auth_user

from django.contrib.auth.models import AbstractUser, BaseUserManager 
from django.db import models 
from django.utils.translation import ugettext_lazy as _ 


class UserManager(BaseUserManager): 


    use_in_migrations = True 

    def _create_user(self, email, password, **extra_fields): 

     if not email: 

      raise ValueError('THE email is not set') 

     email = self.normalize_email(email) 
     user = self.model(email=email, **extra_fields) 
     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_user(self, email, password=None, **extra_fields): 

     extra_fields.setdefault('is_staff', False) 
     extra_fields.setdefault('is_superuser', False) 
     return self._create_user(email, password, **extra_fields) 


    def create_superuser(self, email, password, **extra_fields): 
     extra_fields.setdefault('is_staff', True) 
     extra_fields.setdefault('is_superuser', True) 

     if extra_fields.get('is_staff') is not True: 
      raise ValueError('Superuser must have is_staff=True.') 

     if extra_fields.get('is_superuser') is not True: 
      raise ValueError('Superuser must have is_superuser=True.') 

     return self._create_user(email, password, **extra_fields) 



class User(AbstractUser): 


    username = None 
    email = models.EmailField(_('email address'), unique = True) 


    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = [] 

    objects = UserManager() 

新しいユーザーモデルのための私の顧客ユーザモデルとカスタム・ユーザー・マネージャを作成し

HOW to use email

を追いました文書:

AUTH_USER_MODEL = 'Identities.User' 

私はその後、私は、この新しいユーザーモデルで新しいアカウントを作成しようとしたとき、私はしかし、migratemakemigrationsを使用して、私の新しいモデルを作成した行政文書

from django.contrib import admin 
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin 
from django.utils.translation import ugettext_lazy as _ 


# Register your models here. 

from .models import User 



@admin.register(User) 

class UserAdmin(DjangoUserAdmin): 

    # Define admin model for custom User model with no email field 

    fieldsets = (

     (None, {'fields': ('email', 'password')}), 
     (_('Personal info'), {'fields': ('first_name', 'last_name')}), 
     (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 
             'user_permissions')}), 
     (_('Important dates'), {'fields': ('last_login', 'date_joined')}), 
    ) 

    add_fieldsets = (
     (None, { 
      'classes': ('wide',), 
      'fields': ('email', 'password1', 'password2'), 
      }) 

    ) 

    list_display = ('email', 'first_name', 'last_name', 'is_staff') 
    search_fields = ('email', 'first_name', 'last_name') 
    ordering = ('email',) 

に私の新しいユーザーモデルを登録私は

OperationalError /セルフ/登録/いいえ、そのようなテーブルでこのエラーを得続ける:AUTH_USER要求 方法:POSTリクエストURLを:http://127.0.0.1:8000/Self/register/ジャンゴ バージョン:1.10.5例外の種類:OperationalError例外値:なし 例えば表:

上記例外(そのようなテーブル:AUTH_USER)AUTH_USER

メッセージはまた、これを含有するました

それは私がこのアプリケーションファイルに指示します。 次の例外の直接の原因

レジスタの

/Users/iivri.andre/Identityプラットフォーム/アプリ/セルフ/アイデンティティ/ views.py

form.save() 

これは、レジスタビューのコードです:

def register(request): 

    if request.method == 'POST': 

     form = CreateAccountForm(request.POST) 

     if form.is_valid(): 
      form.save() 
      return redirect('/Self') 
     else: 
      return redirect(reverse('Identities:iivri')) 

    else: 

     form = CreateAccountForm() 
     args = {'form':form} 
     return render(request, 'Identities/create_account.html', args) 

更新

これは私のフォームドキュメント内のコードです:

from django import forms 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm, UserChangeForm 


# Create custom user registration 

class CreateAccountForm(UserCreationForm): 

    email = forms.EmailField(required=True) 


    class Meta: 

     model = User 

     fields = (

     'first_name', 
     'last_name', 
     'email', 
     'password1', 
     'password2' 

     ) 

     def save(self, commit = True): 
      user = super(CreateAccountForm, self).save(commit = False) 
      user.first_name = self.cleaned_data['first_name'] 
      user.last_name = self.cleaned_data['last_name'] 
      user.email = self.cleaned_data['email'] 

      if commit: 
       user.save() 

      return user 


class UpdateAccountForm(UserChangeForm): 

    # exclude certain elements of the form using *fields and *exclude 

    class Meta : 
     # specifiy model being used 
     model = User 

     # list fields to include 
     fields = (

      'email', 
      'first_name', 
      'last_name', 
      'password' 
     ) 

私はすでにThisThis、およびThisを試してみましたし、私はまだエラーを取得しています。

どうすればこの問題を解決できますか。

from django.contrib.auth import get_user_model 

class CreateAccountForm(UserCreationForm): 
    email = forms.EmailField(required=True) 

    class Meta: 
     model=get_user_model() 

使用model=get_user_model():カスタム・ユーザー・モデルを作成しましたが、あなたはまだDjangoのデフォルトのユーザーモデルfrom django.contrib.auth.models import Userを使用しようとしているが、

+0

「CreateAccountForm」のコードも表示してください。 –

+0

@AamirAdnan私の 'CreateAccountForm'クラスを含めるように更新しました –

答えて

2

、あなたはそれではなく、正しいユーザーモデルを返しますget_user_modelを使用すべきではありません他のフォームの場合も同様です。

+0

Admanそれは働いた。ありがとうございました。 –

関連する問題