2013-05-29 36 views
2

我試圖創建一個自定義的用戶配置文件和已經修改的例子只是稍微Django爲什麼給我:'first_name'是這個函數的無效關鍵字參數?

from django.conf import settings 
from django.db import models 
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser 

class MyUserManager(BaseUserManager): 
    def create_user(self, email, password=None, first_name=None, last_name=None): 

     if not email: 
      raise ValueError('Users must have an email address') 

     user = self.model(
      email=MyUserManager.normalize_email(email), 
      first_name=first_name, 
      last_name=last_name, 
      #date_of_birth=date_of_birth, 
     ) 

     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_superuser(self, email, password, first_name=None, last_name=None): 

     user = self.create_user(email, 
      password=password, 
      first_name=first_name, 
      last_name=last_name,    
      #date_of_birth=date_of_birth 
     ) 
     user.is_admin = True 
     user.save(using=self._db) 
     return user 

class MyUser(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=255, 
     unique=True, 
     db_index=True, 
    ) 
    first_name=models.CharField(max_length = 30), 
    last_name=models.CharField(max_length = 30),  
    #date_of_birth = models.DateField() 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 

    objects = MyUserManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = [] 

    def get_full_name(self): 
     # The user is identified by their email address 
     return self.email 

    def get_short_name(self): 
     # The user is identified by their email address 
     return self.email 

    def __unicode__(self): 
     return self.email 

    def has_perm(self, perm, obj=None): 
     "Does the user have a specific permission?" 
     # Simplest possible answer: Yes, always 
     return True 

    def has_module_perms(self, app_label): 
     "Does the user have permissions to view the app `app_label`?" 
     # Simplest possible answer: Yes, always 
     return True 

    @property 
    def is_staff(self): 
     "Is the user a member of staff?" 
     # Simplest possible answer: All admins are staff 
     return self.is_admin 

當我嘗試運行執行syncdb我得到以下錯誤:

You just installed Django's auth system, which means you don't have any superusers defined. 
Would you like to create one now? (yes/no): yes 
Email address: [email protected] 
Password: 
Password (again): 
TypeError: 'first_name' is an invalid keyword argument for this function 

我一直在努力調試這是因爲錯誤消息的性質有限。我覺得我犯了一個簡單的錯誤,我做錯了什麼?

+0

你的'first_name'並在'MyUser'模型'last_name'聲明這不應該出現後有逗號。這是一個錯字嗎? –

+0

Django似乎沒有使用您的自定義用戶模型和/或管理器。你在settings.py中設置了'AUTH_USER_MODEL'嗎? –

回答

3

您試圖將無(空)值設置爲first_name,並且似乎此屬性不允許它。

試試這個變化:

class MyUserManager(BaseUserManager): 
    def create_user(self, email, password=None, first_name='', last_name=''): 

在模型:

first_name=models.CharField(max_length = 30, blank = True) 
相關問題