django扩展AbstractBaseUser,并且自定义了用户ID,进入admin后台,添加新用户时报错?

图片描述

代码:

# -*- coding: utf-8 -*-

from django.db import models

from django.contrib.auth.models import (AbstractBaseUser, BaseUserManager, PermissionsMixin)

import uuid

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

# Create your models here.

class MyUserManager(BaseUserManager):

def create_user(self, mobile, password=None):

"""

Creates and saves a User with the given email, date of

birth and password.

"""

if not mobile:

raise ValueError('Users must have an mobile')

user = self.model(

mobile = mobile,

)

user.id = uuid.uuid3(uuid.NAMESPACE_DNS, str(mobile))

user.set_password(password)

user.save(using=self._db)

return user

def create_superuser(self,mobile,password):

"""

Creates and saves a superuser with the given email, date of

birth and password.

"""

user = self.create_user(mobile,

password=password,

)

user.is_staff=True

user.is_superuser=True

user.save(using=self._db)

return user

class MyUser(AbstractBaseUser, PermissionsMixin):

id = models.CharField(

verbose_name='用户ID', max_length=40, unique=True, primary_key=True

)

mobile = models.CharField(

verbose_name='手机号', max_length=11, unique=True

)

is_staff = models.BooleanField(verbose_name='staff status', default=False)

is_active = models.BooleanField(verbose_name='active', default=True)

date_joined = models.DateTimeField(verbose_name='注册时间', blank=True, null=True)

object = MyUserManager()

USERNAME_FIELD = 'mobile'

# REQUIRED_FIELDS = ['date_of_birth']

REQUIRED_FIELDS = []

def get_full_name(self):

# The user is identified by their email address

return self.mobile

def get_short_name(self):

# The user is identified by their email address

return self.mobile

def __unicode__(self):

return "{0}, {1}".format(self.id, self.mobile)

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

当不使用自定义的ID时是正常的,自定义ID之后,添加新用户就出错,求教!

回答:

uuid不是整数,要使用uuid作为主键,需要在自定义用户模型中的id字段设置为主键,

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, help_text='id')

以上是 django扩展AbstractBaseUser,并且自定义了用户ID,进入admin后台,添加新用户时报错? 的全部内容, 来源链接: utcz.com/a/160816.html

回到顶部