1.我想用自定义的User类,而不想用默认User类,按照官方文档的demo做了下(https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#auth-custom-user),各种奇怪的问题,找不到属性什么的。
下面是我的demo:
from __future__ import unicode_literals from django.db import models from django.contrib.auth.models import AbstractBaseUser from django.contrib.auth.models import BaseUserManager # Create your models here. class UserManager(BaseUserManager): """ test custom user manager """ def __init__(self): pass def create_user(self, username, password=None): """ create user :param username: :param password: :return: """ if not username: raise ValueError('User must have an username') user = self.model(username=username) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, username, password): """ create superuser :param username: :param password: :return: """ user = self.create_user(username=username, password=password) user.is_admin = True user.save(using=self._db) return user class User(AbstractBaseUser): """ test custom user model """ def __init__(self): pass username = models.CharField(max_length=128, unique=True) # is_admin = models.BooleanField(default=False) objects = UserManager() USERNAME_FIELD = "username" #username列 class Meta: db_table = "testdata_user" #表名
AttributeError: 'UserManager' object has no attribute 'name'
一个不成熟的小建议 是手动做映射。
UserManager定义了空的__init__ 方法,但没有调用父类的方法,这样导致无法正常初始化对象.
解决方法:
去掉__init__方法
调用父类的__init__方法
def __init__(self): super(BaseUserManager, self).__init__()
注意
User __init__也没有调用父类的__init__,也有可能出现相同的问题。
检查各个方法不调用父类方法是否可行, 如create_user,create_superuser等等
python super的作用
有没有在settings.py中加入AUTH_USER_MODEL = 'user.User'这个