# -*- coding: utf-8 -*- import re from django.contrib.auth.models import BaseUserManager from django.core import validators from django.db import models from django.utils.translation import gettext_lazy as _ from oscar.apps.customer.abstract_models import AbstractUser class CustomUserManager(BaseUserManager): def create_user(self, username, email, password): """ Creates and saves a User with the given email and password. """ if not email: raise ValueError("Users must have an email address") user = self.model( email=CustomUserManager.normalize_email(email), username=username, is_active=True, ) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, username, email, password): u = self.create_user(username, email, password=password) u.is_admin = True u.is_staff = True u.save(using=self._db) return u class User(AbstractUser): """ Custom user based on Oscar's AbstractUser """ username = models.CharField( _("username"), max_length=30, unique=True, help_text=_( "Required. 30 characters or fewer. Letters, numbers and " "@/./+/-/_ characters" ), validators=[ validators.RegexValidator( re.compile(r"^[\w.@+-]+$"), _("Enter a valid username."), "invalid" ) ], ) extra_field = models.CharField(_("Nobody needs me"), max_length=5, blank=True) objects = CustomUserManager() class Meta: app_label = "myauth"