t0i*_*0ap 5 python django django-users
我的项目名称是timecapture
这是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'
Run Code Online (Sandbox Code Playgroud)
这里是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
Run Code Online (Sandbox Code Playgroud)
运行全新迁移后db中的表是:
| Tables_in_timecapture |
+------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| django_content_type |
| django_migrations |
| django_session |
Run Code Online (Sandbox Code Playgroud)
我在我的timeuser模型中玩过类元设置,但没有一个给出任何不同的结果.当我尝试创建用户或超级用户时,它会给出错误:
django.db.utils.ProgrammingError: (1146, "Table 'timecapture.timeuser' doesn't exist")
Run Code Online (Sandbox Code Playgroud)
python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)
当我尝试时,而不是上面
python manage.py makemigrations timecapture
Run Code Online (Sandbox Code Playgroud)
它为自定义用户模型创建了迁移