diff --git a/jobportal/settings.py b/jobportal/settings.py index 657f932..9fc5b5e 100644 --- a/jobportal/settings.py +++ b/jobportal/settings.py @@ -41,6 +41,8 @@ INSTALLED_APPS = [ 'users', ] +AUTH_USER_MODEL = 'users.Account' + MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', diff --git a/users/admin.py b/users/admin.py index 8c38f3f..dedc261 100644 --- a/users/admin.py +++ b/users/admin.py @@ -1,3 +1,29 @@ from django.contrib import admin +from django.contrib.auth.admin import UserAdmin -# Register your models here. +from .models import Account + + +class MyAdminAccounts(UserAdmin): + model = Account + list_display = ('email', 'first_name', 'last_name', 'is_employee', 'is_employer') + list_filter = ('email', 'first_name', 'last_name', 'is_employee', 'is_employer') + search_fields = ('email', 'first_name', 'last_name') + ordering = ('email', 'first_name') + readonly_fields = ['date_joined'] + + add_fieldsets = ( + (None, { + 'classes': ('wide',), + 'fields': ('email', 'first_name', 'last_name', 'password1', 'password2', + 'is_employee', 'is_employer', 'is_active') + }), + ) + + fieldsets = ( + (None, {'fields': ('email', 'first_name', 'last_name', 'password')}), + ('Permissions', {'fields': ('is_staff', 'is_active', 'is_employee', 'is_employer')}) + ) + + +admin.site.register(Account, MyAdminAccounts) diff --git a/users/migrations/0001_initial.py b/users/migrations/0001_initial.py new file mode 100644 index 0000000..390ef2e --- /dev/null +++ b/users/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# Generated by Django 3.1.4 on 2020-12-29 21:58 + +from django.db import migrations, models +import users.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ] + + operations = [ + migrations.CreateModel( + name='Account', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')), + ('first_name', models.CharField(max_length=50, verbose_name='first name')), + ('last_name', models.CharField(max_length=50, verbose_name='last name')), + ('date_joined', models.DateTimeField(auto_now_add=True, verbose_name='date joined')), + ('is_active', models.BooleanField(default=True, verbose_name='active')), + ('is_staff', models.BooleanField(default=False, verbose_name='is_staff')), + ('is_employee', models.BooleanField(default=False)), + ('is_employer', models.BooleanField(default=False)), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + }, + managers=[ + ('objects', users.models.UserManager()), + ], + ), + ] diff --git a/users/models.py b/users/models.py index c8ed058..57f3ad5 100644 --- a/users/models.py +++ b/users/models.py @@ -5,7 +5,27 @@ from django.utils.translation import gettext_lazy as _ class UserManager(BaseUserManager): - pass + use_in_migrations = True + + def _create_user(self, email, password, **extra_fields): + if not email: + raise ValueError('Your email is not correct!') + + 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): + extra_fields.setdefault('is_superuser', False) + return self._create_user(email, password, **extra_fields) + + def create_superuser(self, email, password, **extra_fields): + extra_fields.setdefault('is_superuser', 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 Account(AbstractBaseUser, PermissionsMixin):