2016-07-27 10 views
0

私はDjangoとAngularJSを使用した認証ページを含むプロジェクトに取り組んでいます。私はUserクラスの拡張バージョンを作成し、 "company"と "phone_number"をフィールドとして追加しました。ここでDjangoはSQLiteテーブルを正しく更新していません

はmodels.pyのための私のコードです:

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager 
from django.db import models 
from django.core.validators import RegexValidator 




class AccountManager(BaseUserManager): 
    def create_user(self, email, password=None, **kwargs): 
     if not email: 
      raise ValueError('Users must have a valid email address') 

     #if not kwargs.get('username'): 
      #raise ValueError('Users must have a valid username') 

     #if access_code not in ['password']: 
      #raise ValueError('Sorry you are not eligible to join') 

     account = self.model(
      email=self.normalize_email(email)) 

     account.set_password(password) 
     account.save() 

     return account 

    def create_superuser(self, email, password, **kwargs): 
     account = self.create_user(email, password, **kwargs) 

     account.is_admin = True 
     account.save() 

     return account 


class Account(AbstractBaseUser): 
    email = models.EmailField(unique=True) 

    first_name = models.CharField(max_length=40, blank=False) 
    last_name = models.CharField(max_length=40, blank=False) 
    company = models.CharField(max_length=40, blank=False) 
    phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.") 
    phone_number = models.IntegerField(validators=[phone_regex], blank=False, null=True) # validators should be a list 
    # access_code = models.CharField(max_length=40, blank=False, default='SOME STRING') 

    is_admin = models.BooleanField(default=False) 

    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

    objects = AccountManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['first_name', 'last_name', 'company', 'phone_number'] 

    def __unicode__(self): 
     return self.email 

    def get_full_name(self): 
     return ' '.join([self.first_name, self.last_name]) 

    def get_short_name(self): 
     return self.first_name 

今、私はターミナルに行くと、すべてのフィールドオプションは、テキストを入力するために私のためにポップアップのpython manage.pyのcreatesuperuserを実行するとき。しかし、後でデータベースをチェックすると、電子メールとパスワードのフィールドだけが更新されます。会社名、電話番号、名字、姓が ''と返されます。

私は間違って何をしていますか?私はこの問題を解決しようとすると時間をかけすぎてしまった。 create_user

+0

推奨読書:[最小限で完全であり、かつ検証可能な例を作成する方法](http://stackoverflow.com/help/mcve) – wogsland

答えて

0

おかげで、あなたはself.modelコールに他のいずれかの引数が渡されていないので、あなただけの、後に、パスワードを電子メールを設定します。あなたはそこにkwargsも渡す必要があります。

account = self.model(email=self.normalize_email(email), **kwargs) 
関連する問題