Extra usefful links, especially the first one
- Django official docs full example
- Django authtool packager source code: read the models.py, admin.py and forms.py file
| from django.contrib import admin | |
| from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin | |
| from django.utils.translation import ugettext_lazy as _ | |
| from .models import User | |
| @admin.register(User) | |
| class UserAdmin(DjangoUserAdmin): | |
| """Define admin model for custom User model with no email field.""" | |
| fieldsets = ( | |
| (None, {'fields': ('email', 'password')}), | |
| (_('Personal info'), {'fields': ('first_name', 'last_name')}), | |
| (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', | |
| 'groups', 'user_permissions')}), | |
| (_('Important dates'), {'fields': ('last_login', 'date_joined')}), | |
| ) | |
| add_fieldsets = ( | |
| (None, { | |
| 'classes': ('wide',), | |
| 'fields': ('email', 'password1', 'password2'), | |
| }), | |
| ) | |
| list_display = ('email', 'first_name', 'last_name', 'is_staff') | |
| search_fields = ('email', 'first_name', 'last_name') | |
| ordering = ('email',) |
Extra usefful links, especially the first one
| # users/model.py | |
| from django.contrib.auth.models import AbstractUser, UserManager as DjangoUserManager | |
| from django.utils.translation import gettext_lazy as _ | |
| class UserManager(DjangoUserManager): | |
| """Define a model manager for User model with no username field.""" | |
| def _create_user(self, email, password, **extra_fields): | |
| """Create and save a User with the given email and password.""" | |
| if not email: | |
| raise ValueError('The given email must be set') | |
| email = self.normalize_email(email) | |
| user = self.model(email=email, **extra_fields) | |
| user.set_password(password) | |
| user.save(using=self._db) | |
| return user | |
| def create_user(self, email, password=None, **extra_fields): | |
| """Create and save a regular User with the given email and password.""" | |
| extra_fields.setdefault('is_staff', False) | |
| extra_fields.setdefault('is_superuser', False) | |
| return self._create_user(email, password, **extra_fields) | |
| def create_superuser(self, email, password, **extra_fields): | |
| """Create and save a SuperUser with the given email and password.""" | |
| extra_fields.setdefault('is_staff', True) | |
| extra_fields.setdefault('is_superuser', True) | |
| if extra_fields.get('is_staff') is not True: | |
| raise ValueError('Superuser must have is_staff=True.') | |
| if extra_fields.get('is_superuser') is not True: | |
| raise ValueError('Superuser must have is_superuser=True.') | |
| return self._create_user(email, password, **extra_fields) | |
| class User(AbstractUser): | |
| """User model.""" | |
| username = None | |
| email = models.EmailField(_('email address'), unique=True) | |
| USERNAME_FIELD = 'email' | |
| REQUIRED_FIELDS = [] | |
| objects = UserManager() | |