Skip to content

Updated User model variable names #477

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 16 additions & 12 deletions app/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class UserAdmin(DefaultUserAdmin):
{
"fields": (
"username",
"email",
"email_intake",
"password",
)
},
Expand All @@ -56,12 +56,12 @@ class UserAdmin(DefaultUserAdmin):
_("Profile"),
{
"fields": (
"first_name",
"last_name",
"gmail",
"preferred_email",
"current_job_title",
"target_job_title",
"name_first",
"name_last",
"email_gmail",
"email_preferred",
"job_title_current_intake",
"job_title_target_intake",
"current_skills",
"target_skills",
"linkedin_account",
Expand All @@ -70,14 +70,18 @@ class UserAdmin(DefaultUserAdmin):
"phone",
"texting_ok",
"time_zone",
"practice_area_primary",
"practice_area_secondary",
"practice_area_target_intake",
"email_cognito",
)
},
),
(
_("Permissions"),
{
"fields": (
"is_active",
"user_status",
"is_staff",
"is_superuser",
"groups",
Expand All @@ -95,15 +99,15 @@ class UserAdmin(DefaultUserAdmin):
},
),
)
readonly_fields = ("username", "email", "created_at", "updated_at")
readonly_fields = ("username", "email_intake", "created_at", "updated_at")
add_fieldsets = (
(
None,
{
"classes": ("wide",),
"fields": (
"username",
"email",
"email_intake",
"password",
"password2",
),
Expand All @@ -112,8 +116,8 @@ class UserAdmin(DefaultUserAdmin):
)
form = UserChangeForm
add_form = UserCreationForm
list_display = ("username", "is_staff", "is_active")
list_filter = ("username", "email")
list_display = ("username", "is_staff", "user_status")
list_filter = ("username", "email_intake")


@admin.register(Project)
Expand Down
20 changes: 12 additions & 8 deletions app/core/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,13 @@ class Meta:
"username",
"created_at",
"updated_at",
"email",
"first_name",
"last_name",
"gmail",
"preferred_email",
"current_job_title",
"target_job_title",
"email_intake",
"name_first",
"name_last",
"email_gmail",
"email_preferred",
"job_title_current_intake",
"job_title_target_intake",
"current_skills",
"target_skills",
"linkedin_account",
Expand All @@ -91,13 +91,17 @@ class Meta:
"phone",
"texting_ok",
"time_zone",
"practice_area_primary",
"practice_area_secondary",
"practice_area_target_intake",
"email_cognito",
)
read_only_fields = (
"uuid",
"created_at",
"updated_at",
"username",
"email",
"email_intake",
)


Expand Down
8 changes: 4 additions & 4 deletions app/core/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def get(self, request, *args, **kwargs):
description="Return a list of all the existing users",
parameters=[
OpenApiParameter(
name="email",
name="email_intake",
type=str,
description="Filter by email address",
examples=[
Expand Down Expand Up @@ -120,9 +120,9 @@ def get_queryset(self):
Optionally filter users by an 'email' and/or 'username' query paramerter in the URL
"""
queryset = get_user_model().objects.all()
email = self.request.query_params.get("email")
if email is not None:
queryset = queryset.filter(email=email)
email_intake = self.request.query_params.get("email_intake")
if email_intake is not None:
queryset = queryset.filter(email_intake=email_intake)
username = self.request.query_params.get("username")
if username is not None:
queryset = queryset.filter(username=username)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Generated by Django 4.2.16 on 2025-03-14 21:22

import core.models
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core', '0033_projectstatus_project_current_status'),
]

operations = [
migrations.AlterModelManagers(
name='user',
managers=[
('objects', core.models.UserManager()),
],
),
migrations.RenameField(
model_name='user',
old_name='gmail',
new_name='email_gmail',
),
migrations.RenameField(
model_name='user',
old_name='email',
new_name='email_intake',
),
migrations.RenameField(
model_name='user',
old_name='preferred_email',
new_name='email_preferred',
),
migrations.RenameField(
model_name='user',
old_name='current_job_title',
new_name='job_title_current_intake',
),
migrations.RenameField(
model_name='user',
old_name='target_job_title',
new_name='job_title_target_intake',
),
migrations.RenameField(
model_name='user',
old_name='first_name',
new_name='name_first',
),
migrations.RenameField(
model_name='user',
old_name='last_name',
new_name='name_last',
),
migrations.RemoveField(
model_name='user',
name='is_active',
),
migrations.AddField(
model_name='user',
name='email_cognito',
field=models.EmailField(blank=True, max_length=254),
),
migrations.AddField(
model_name='user',
name='practice_area_primary',
field=models.ManyToManyField(blank=True, related_name='primary_users', to='core.practicearea'),
),
migrations.AddField(
model_name='user',
name='practice_area_secondary',
field=models.ManyToManyField(blank=True, related_name='secondary_users', to='core.practicearea'),
),
migrations.AddField(
model_name='user',
name='practice_area_target_intake',
field=models.ManyToManyField(blank=True, related_name='target_intake_users', to='core.practicearea'),
),
]
2 changes: 1 addition & 1 deletion app/core/migrations/max_migration.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0033_projectstatus_project_current_status
0034_alter_user_managers_rename_gmail_user_email_gmail_and_more
80 changes: 67 additions & 13 deletions app/core/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import uuid

from django.apps import apps
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.base_user import BaseUserManager
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.models import UserManager
from django.contrib.auth.validators import UnicodeUsernameValidator
from django.db import models
from phonenumber_field.modelfields import PhoneNumberField
Expand All @@ -27,6 +28,49 @@ def __repr__(self):
return f"<{self.__class__.__name__} {self.uuid}>"


class UserManager(BaseUserManager):
"""
This is based on the UserManager from django 4.2
"""

use_in_migrations = True

def _create_user(self, username, password, **extra_fields):
"""
Create and save a user with the given username, email, and password.
"""

# Lookup the real model class from the global app registry so this
# manager method can be used in migrations. This is fine because
# managers are by definition working on the real model.
if not username:
raise ValueError("The given username must be set")
global_user_model = apps.get_model(
self.model._meta.app_label, self.model._meta.object_name
)
username = global_user_model.normalize_username(username)
user = self.model(username=username, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user

def create_user(self, username, password=None, **extra_fields):
extra_fields.setdefault("is_staff", False)
extra_fields.setdefault("is_superuser", False)
return self._create_user(username, password, **extra_fields)

def create_superuser(self, username, password, **extra_fields):
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(username, password, **extra_fields)


class User(PermissionsMixin, AbstractBaseUser, AbstractBaseModel):
"""
Table contains cognito-users & django-users.
Expand All @@ -53,7 +97,6 @@ class User(PermissionsMixin, AbstractBaseUser, AbstractBaseModel):
username = models.CharField(
"Username", max_length=255, unique=True, validators=[username_validator]
)
is_active = models.BooleanField("Active", default=True)

# Cognito-user related fields #
# some additional fields which will be filled-out only for users
Expand All @@ -62,26 +105,37 @@ class User(PermissionsMixin, AbstractBaseUser, AbstractBaseModel):

# Django-user related fields #
# password is inherited from AbstractBaseUser
email = models.EmailField("Email address", blank=True) # allow non-unique emails
email_intake = models.EmailField(
"Email address", blank=True
) # allow non-unique emails
is_staff = models.BooleanField(
"staff status",
default=False,
help_text="Designates whether the user can log into this admin site.",
)

first_name = models.CharField(max_length=255, blank=True)
last_name = models.CharField(max_length=255, blank=True)
gmail = models.EmailField(blank=True)
preferred_email = models.EmailField(blank=True)
name_first = models.CharField(max_length=255, blank=True)
name_last = models.CharField(max_length=255, blank=True)
email_gmail = models.EmailField(blank=True)
email_preferred = models.EmailField(blank=True)
email_cognito = models.EmailField(blank=True)

user_status = models.ForeignKey(
"UserStatusType", null=True, on_delete=models.PROTECT
)
# current_practice_area = models.ManyToManyField("PracticeArea")
# target_practice_area = models.ManyToManyField("PracticeArea")
practice_area_primary = models.ManyToManyField(
"PracticeArea", related_name="primary_users", blank=True
)
practice_area_secondary = models.ManyToManyField(
"PracticeArea", related_name="secondary_users", blank=True
)
practice_area_target_intake = models.ManyToManyField(
"PracticeArea", related_name="target_intake_users", blank=True
)

current_job_title = models.CharField(max_length=255, blank=True)
target_job_title = models.CharField(max_length=255, blank=True)
job_title_current_intake = models.CharField(max_length=255, blank=True)
job_title_target_intake = models.CharField(max_length=255, blank=True)
current_skills = models.CharField(max_length=255, blank=True)
target_skills = models.CharField(max_length=255, blank=True)

Expand All @@ -105,15 +159,15 @@ class User(PermissionsMixin, AbstractBaseUser, AbstractBaseModel):
objects = UserManager()

USERNAME_FIELD = "username"
EMAIL_FIELD = "preferred_email"
REQUIRED_FIELDS = ["email"] # used only on createsuperuser
EMAIL_FIELD = "email_preferred"
REQUIRED_FIELDS = ["email_intake"] # used only on createsuperuser

@property
def is_django_user(self):
return self.has_usable_password()

def __str__(self):
return f"{self.email}"
return f"{self.email_intake}"


class ProjectStatus(AbstractBaseModel):
Expand Down
Loading