2016-03-06 89 views
5

我的項目名稱是timecapture的Django 1.9不能爲自定義用戶模型創建表

這裏是timecapture/settings.py

INSTALLED_APPS = [ 
     # 'django.contrib.admin', 
     'django.contrib.auth', 
     'django.contrib.contenttypes', 
     'django.contrib.sessions', 
     'django.contrib.messages', 
     'django.contrib.staticfiles', 
     'timecapture', 
     'timesheet' 
     ] 

AUTH_USER_MODEL = 'timecapture.TimeUser' 

的相關部分這裏是timecapture/models.py

from django.contrib.auth.models import (
    BaseUserManager, AbstractBaseUser 
) 
from django.utils.translation import ugettext_lazy as _ 
from django.db import models 
from django.utils import timezone 

class TimeUserManager(BaseUserManager): 
    use_in_migrations = True 
    def create_user(self, email, password=None): 
     """ 
      Creates and saves a User with the given email, date of 
      birth and password. 
     """ 
     if not email: 
      raise ValueError('Users must have an email address') 

     user = self.model(
       email=self.normalize_email(email), 
       ) 

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

    def create_superuser(self, email, password): 
     """ 
      Creates and saves a superuser with the given email, date of 
      birth and password. 
     """ 
     user = self.create_user(email, 
       password=password, 
       ) 
     user.is_staff = True 
     user.save(using=self._db) 
     return user   

class TimeUser(AbstractBaseUser): 
    email = models.EmailField(
      verbose_name='email address', 
      max_length=255, 
      unique=True, 
      ) 
    is_active = models.BooleanField(
      _('active'), 
      default=True, 
      help_text=_(
       'Designates whether this user should be treated as active. ' 
       'Unselect this instead of deleting accounts.' 
       ), 
      ) 
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now) 
    first_name = models.CharField(_('first name'), max_length=30, blank=True) 
    last_name = models.CharField(_('last name'), max_length=30, blank=True) 
    is_staff = models.BooleanField(
      _('staff status'), 
      default=False, 
      help_text=_('Designates whether the user can log into this admin site.'), 
      ) 
    date_of_birth = models.DateField() 
    objects = TimeUserManager() 

    USERNAME_FIELD = 'email' 
    class Meta: 
     verbose_name = _('TimeUser') 
     verbose_name_plural = _('TimeUsers') 
     abstract = False 
     db_table = 'timeuser' 
     app_label = 'timecapture' 

    def get_full_name(self): 
     """ 
     Returns the first_name plus the last_name, with a space in between. 
     """ 
     full_name = '%s %s' % (self.first_name, self.last_name) 
     return full_name.strip() 

    def get_short_name(self): 
     "Returns the short name for the user." 
     return self.first_name 


    def __str__(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 

    def email_user(self, subject, message, from_email=None, **kwargs): 
     """ 
     Sends an email to this User. 
     """ 
     send_mail(subject, message, from_email, [self.email], **kwargs) 

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

運行新遷移後db中的表格爲:

| Tables_in_timecapture | 
+------------------------+ 
| auth_group    | 
| auth_group_permissions | 
| auth_permission  | 
| django_content_type | 
| django_migrations  | 
| django_session   | 

我在我的timeuser模型中玩過類元設置,但沒有一個給出了任何不同的結果。當我嘗試創建用戶或超級用戶提示錯誤:

django.db.utils.ProgrammingError: (1146, "Table 'timecapture.timeuser' doesn't exist") 
+0

你做makemigrations和遷移? –

+0

@AswinMurugesh是的,我甚至放棄並重新創建我的數據庫幾次,以徹底測試它。 – t0il3ts0ap

+0

@AswinMurugesh嗨,而不是運行'python manage.py makemigrations',我試過'python manage.py makemigrations timecapture'並創建了遷移。那是怎麼發生的 ? – t0il3ts0ap

回答

5
python manage.py makemigrations 

而不是上面,當我試圖

python manage.py makemigrations timecapture 

它創建的遷移自定義用戶模型

相關問題