Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- python manage.py createsuperuser
- AUTH_USER_MODEL = 'accounts.CustomUser'
- from django.db import models
- from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
- class CustomUserManager(BaseUserManager):
- def create_user(self, email, password):
- if not email:
- raise ValueError("Users must have an email address")
- if not password:
- raise ValueError("Users must have a password")
- user = self.model(
- email = self.normalize_email(email)
- )
- user.set_password(password)
- user.save(using=self._db)
- return user
- def create_staffuser(self, email, password, first_name, last_name):
- if not first_name:
- raise ValueError("Staff and superusers must have a first name")
- if not last_name:
- raise ValueError("Staff and superusers must have a last name")
- user = self.create_user(
- email,
- password=password
- )
- user.first_name = first_name
- user.last_name = last_name
- user.is_staff = True
- user.save(using=self._db)
- return user
- def create_superuser(self, email, password, first_name, last_name):
- user = self.create_staffuser(
- email,
- password=password,
- first_name=first_name,
- last_name=last_name
- )
- user.is_admin = True
- user.save(using=self._db)
- return user
- class CustomUser(AbstractBaseUser, PermissionsMixin):
- email = models.EmailField(null=True, max_length=80, unique=True)
- USERNAME_FIELD = 'email'
- is_active = models.BooleanField(default=True)
- is_admin = models.BooleanField(default=False)
- is_staff = models.BooleanField(default=False)
- first_name = models.CharField(max_length=25, blank=True, null=True)
- last_name = models.CharField(max_length=25, blank=True, null=True)
- date_joined = models.DateField(auto_now_add=True, null=True)
- REQUIRED_FIELDS = [first_name, last_name]
- objects = CustomUserManager()
- def __str__(self):
- return self.email
- def get_short_name():
- return first_name
- def get_full_name():
- return first_name + ' ' + last_name
- from django import forms
- from django.contrib.auth.forms import ReadOnlyPasswordHashField
- from .models import CustomUser
- class UserCreationForm(forms.ModelForm):
- """A form for creating new users. Includes all the required
- fields, plus a repeated password."""
- password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
- password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)
- class Meta:
- model = CustomUser
- fields = ('email', 'first_name', 'last_name')
- def clean_password2(self):
- # Check that the two password entries match
- password1 = self.cleaned_data.get("password1")
- password2 = self.cleaned_data.get("password2")
- if password1 and password2 and password1 != password2:
- raise forms.ValidationError("Passwords don't match")
- return password2
- def save(self, commit=True):
- # Save the provided password in hashed format
- user = super().save(commit=False)
- user.set_password(self.cleaned_data["password1"])
- if commit:
- user.save()
- return user
- class UserChangeForm(forms.ModelForm):
- """A form for updating users. Includes all the fields on
- the user, but replaces the password field with admin's
- password hash display field.
- """
- password = ReadOnlyPasswordHashField()
- class Meta:
- model = CustomUser
- fields = ('email', 'password', 'first_name', 'last_name', 'is_active', 'is_admin')
- def clean_password(self):
- # Regardless of what the user provides, return the initial value.
- # This is done here, rather than on the field, because the
- # field does not have access to the initial value
- return self.initial["password"]
- from django.contrib import admin
- from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
- from .models import CustomUser
- from .forms import UserCreationForm, UserChangeForm
- class UserAdmin(BaseUserAdmin):
- # The forms to add and change user instances
- form = UserChangeForm
- add_form = UserCreationForm
- # The fields to be used in displaying the User model.
- # These override the definitions on the base UserAdmin
- # that reference specific fields on auth.User.
- list_display = ('email', 'first_name', 'last_name', 'is_admin')
- list_filter = ('is_admin',)
- fieldsets = (
- (None, {'fields': ('email', 'password')}),
- ('Personal info', {'fields': ('first_name', 'last_name',)}),
- ('Meta', {'fields': ('date_joined', 'last_login', 'is_active',)}),
- ('Permissions', {'fields': ('is_admin', 'is_staff',)}),
- )
- # add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
- # overrides get_fieldsets to use this attribute when creating a user.
- add_fieldsets = (
- (None, {
- 'classes': ('wide',),
- 'fields': ('email', 'first_name', 'last_name' 'password1', 'password2')}
- ),
- )
- search_fields = ('email', 'first_name')
- ordering = ('email',)
- filter_horizontal = ()
- admin.site.register(CustomUser, UserAdmin)
- Traceback (most recent call last):
- File "manage.py", line 15, in <module>
- execute_from_command_line(sys.argv)
- File "/home/howdidthishappen/Projects/project-root/project_env/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
- utility.execute()
- File "/home/howdidthishappen/Projects/project-root/project_env/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute
- self.fetch_command(subcommand).run_from_argv(self.argv)
- File "/home/howdidthishappen/Projects/project-root/project_env/lib/python3.6/site-packages/django/core/management/base.py", line 282, in run_from_argv
- options = parser.parse_args(argv[2:])
- File "/home/howdidthishappen/Projects/project-root/project_env/lib/python3.6/site-packages/django/core/management/base.py", line 54, in parse_args
- return super().parse_args(args, namespace)
- File "/usr/lib/python3.6/argparse.py", line 1739, in parse_args
- args, argv = self.parse_known_args(args, namespace)
- File "/usr/lib/python3.6/argparse.py", line 1760, in parse_known_args
- if not hasattr(namespace, action.dest):
- TypeError: hasattr(): attribute name must be string
Add Comment
Please, Sign In to add comment