#coding=utf-8 from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Group, PermissionsMixin from django.utils import timezone from django.conf import settings from apps.exceptions import CustomError from apps.foundation.consts import CONTENT_TYPE_SORTING, MENU_TO_MODEL from apps.foundation.models import BizLog from apps.activity.models import Branch class UserManager(BaseUserManager): def create_user(self, username, password=None, **extra_fields): if not username: raise ValueError(u'请输入用户名') user = self.model(username=username, is_superuser=False, last_login=timezone.now(), **extra_fields) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, username, password, **extra_fields): u = self.create_user(username, password, **extra_fields) u.is_superuser = True u.save(using=self._db) return u # def sort_perms(self, perms): # def get_index(app_label, model): # try: # return CONTENT_TYPE_SORTING.index('{}-{}'.format(app_label, model)) # except: # return 9999 # # perms = perms.order_by('content_type__model', 'id') # perms = sorted(perms, key=lambda n: get_index(n.content_type.app_label, n.content_type.model)) # return perms # # def get_menuname_of_contenttype(self, app_label, model): # for menu in MENU_TO_MODEL: # val = '{}-{}'.format(app_label, model) # if val in menu[1]: # return menu[0] # return u'未分类' # # def save_group(self, id, name, permissions, user): # name = name.strip(u' ') # #old_permissions = None # if id == None or id == '': # is_exist = Group.objects.filter(name=name).first() # if is_exist: # raise CustomError(u'名称为[%s]的权限组已存在' % name) # group = Group.objects.create(name=name) # BizLog.objects.addnew(user, BizLog.INSERT, u"添加权限组[%s],id=%d" % (group.name, group.id)) # else: # is_exist = Group.objects.filter(name=name).exclude(pk=id).first() # if is_exist: # raise CustomError(u'名称为[%s]的权限组已存在' % name) # group = Group.objects.filter(pk=id).first() # if not group: # raise CustomError(u'未找到相应的权限组') # group.name = name # group.save() # # old_permissions = [p.id for p in group.permissions.all()] # BizLog.objects.addnew(user, BizLog.UPDATE, u"修改权限组[%s],id=%d" % (group.name, group.id)) # group.permissions = permissions # 去掉下属创建权限组中的权限 #if old_permissions: # new_permissions = [p.id for p in group.permissions.all()] # diff = list(set(old_permissions).difference(set(new_permissions))) # users = User.objects.filter(groups=group) # groups = Group.objects.filter(create_user__in=users,permissions__id__in=diff) # for g in groups: # for pk in diff: # g.permissions.remove(pk) class User(AbstractBaseUser, PermissionsMixin): branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT, null=True, blank=True) name = models.CharField(max_length=20, verbose_name=u"姓名") username = models.CharField(max_length=30, verbose_name=u'账号', unique=True, db_index=True,error_messages={'unique': u'已存在'}) tel = models.CharField(max_length=15, verbose_name=u"手机号码", null=True, blank=True) gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u"性别",null=True,blank=True) address = models.CharField(max_length=500, verbose_name=u"家庭住址", null=True, blank=True) #department = models.ForeignKey('Department', verbose_name=u"所属部门", null=True, blank=True, on_delete=models.PROTECT) date_joined = models.DateTimeField(verbose_name=u'注册时间', default=timezone.now, null=True) enabled = models.BooleanField(verbose_name=u"在用", default=True) objects = UserManager() USERNAME_FIELD = 'username' REQUIRED_FIELDS = [] @staticmethod def getById(id): try: id = int(id) except: raise CustomError(u'无效的员工ID') instance = User.objects.filter(pk=id).first() if not instance: raise CustomError(u'未找到相应的员工') return instance def __str__(self): return self.name def __unicode__(self): return self.name class Meta: db_table = "auth_user" verbose_name = u"人员管理" ordering = ('-id',)