mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-05-16 09:37:03 +02:00
Respond to review feedback
This commit is contained in:
parent
5c3460782e
commit
60f282752b
12 changed files with 69 additions and 119 deletions
|
@ -3,12 +3,17 @@ from django.contrib.auth.admin import UserAdmin
|
||||||
from .models import User, UserProfile
|
from .models import User, UserProfile
|
||||||
|
|
||||||
|
|
||||||
# edit a user's profile on the user page
|
|
||||||
class UserProfileInline(admin.StackedInline):
|
class UserProfileInline(admin.StackedInline):
|
||||||
|
|
||||||
|
"""Edit a user's profile on the user page."""
|
||||||
|
|
||||||
model = UserProfile
|
model = UserProfile
|
||||||
|
|
||||||
|
|
||||||
class MyUserAdmin(UserAdmin):
|
class MyUserAdmin(UserAdmin):
|
||||||
|
|
||||||
|
"""Custom user admin class to use our inlines."""
|
||||||
|
|
||||||
inlines = [UserProfileInline]
|
inlines = [UserProfileInline]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -54,9 +54,6 @@ BASE_DIR = path.resolve().parent.parent
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = env_debug
|
DEBUG = env_debug
|
||||||
|
|
||||||
# Use our user model instead of the default
|
|
||||||
AUTH_USER_MODEL = "registrar.User"
|
|
||||||
|
|
||||||
|
|
||||||
# Applications are modular pieces of code.
|
# Applications are modular pieces of code.
|
||||||
# They are provided by Django, by third-parties, or by yourself.
|
# They are provided by Django, by third-parties, or by yourself.
|
||||||
|
@ -185,6 +182,9 @@ DATABASES = {
|
||||||
# Specify default field type to use for primary keys
|
# Specify default field type to use for primary keys
|
||||||
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
||||||
|
|
||||||
|
# Use our user model instead of the default
|
||||||
|
AUTH_USER_MODEL = "registrar.User"
|
||||||
|
|
||||||
# endregion
|
# endregion
|
||||||
# region: Email-------------------------------------------------------------###
|
# region: Email-------------------------------------------------------------###
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ For more information see:
|
||||||
https://docs.djangoproject.com/en/4.0/topics/http/urls/
|
https://docs.djangoproject.com/en/4.0/topics/http/urls/
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.urls import include, path
|
from django.urls import include, path
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,20 @@ from django import forms
|
||||||
|
|
||||||
from .models import UserProfile
|
from .models import UserProfile
|
||||||
|
|
||||||
|
|
||||||
class EditProfileForm(forms.ModelForm):
|
class EditProfileForm(forms.ModelForm):
|
||||||
display_name = forms.CharField(widget=forms.TextInput(attrs={'class': 'usa-input'}), label="Display Name")
|
|
||||||
|
"""Custom form class for editing a UserProfile.
|
||||||
|
|
||||||
|
We can add whatever fields we want to this form and customize how they
|
||||||
|
are displayed. The form is rendered into a template `profile.html` by a
|
||||||
|
view called `edit_profile` in `profile.py`.
|
||||||
|
"""
|
||||||
|
|
||||||
|
display_name = forms.CharField(
|
||||||
|
widget=forms.TextInput(attrs={"class": "usa-input"}), label="Display Name"
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = UserProfile
|
model = UserProfile
|
||||||
fields = ['display_name']
|
fields = ["display_name"]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 4.1.1 on 2022-09-22 16:05
|
# Generated by Django 4.1.1 on 2022-09-26 15:26
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
import django.contrib.auth.models
|
import django.contrib.auth.models
|
||||||
|
@ -127,7 +127,9 @@ class Migration(migrations.Migration):
|
||||||
"verbose_name_plural": "users",
|
"verbose_name_plural": "users",
|
||||||
"abstract": False,
|
"abstract": False,
|
||||||
},
|
},
|
||||||
managers=[("objects", django.contrib.auth.models.UserManager())],
|
managers=[
|
||||||
|
("objects", django.contrib.auth.models.UserManager()),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name="UserProfile",
|
name="UserProfile",
|
||||||
|
@ -143,16 +145,16 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||||
("updated_at", models.DateTimeField(auto_now=True)),
|
("updated_at", models.DateTimeField(auto_now=True)),
|
||||||
("street1", models.CharField(max_length=2)),
|
("street1", models.TextField(blank=True)),
|
||||||
("street2", models.CharField(max_length=2)),
|
("street2", models.TextField(blank=True)),
|
||||||
("street3", models.CharField(max_length=2)),
|
("street3", models.TextField(blank=True)),
|
||||||
("city", models.CharField(max_length=2)),
|
("city", models.TextField(blank=True)),
|
||||||
("sp", models.CharField(max_length=2)),
|
("sp", models.TextField(blank=True)),
|
||||||
("pc", models.CharField(max_length=2)),
|
("pc", models.TextField(blank=True)),
|
||||||
("cc", models.CharField(max_length=2)),
|
("cc", models.TextField(blank=True)),
|
||||||
("voice", models.CharField(max_length=2)),
|
("voice", models.TextField(blank=True)),
|
||||||
("fax", models.CharField(max_length=2)),
|
("fax", models.TextField(blank=True)),
|
||||||
("email", models.CharField(max_length=2)),
|
("email", models.TextField(blank=True)),
|
||||||
("display_name", models.TextField()),
|
("display_name", models.TextField()),
|
||||||
(
|
(
|
||||||
"user",
|
"user",
|
||||||
|
@ -163,6 +165,8 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
options={"abstract": False},
|
options={
|
||||||
|
"abstract": False,
|
||||||
|
},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
# Generated by Django 4.1.1 on 2022-09-22 16:51
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
("registrar", "0001_initial"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="cc",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="city",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="email",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="fax",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="pc",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="sp",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="street1",
|
|
||||||
field=models.TextField(),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="street2",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="street3",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="voice",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,18 +0,0 @@
|
||||||
# Generated by Django 4.1.1 on 2022-09-22 16:53
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
("registrar", "0002_alter_userprofile_cc_alter_userprofile_city_and_more"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="userprofile",
|
|
||||||
name="street1",
|
|
||||||
field=models.TextField(blank=True),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,3 +1,3 @@
|
||||||
from .models import User, UserProfile
|
from .models import User, UserProfile
|
||||||
|
|
||||||
__all__ = [User, UserProfile]
|
__all__ = ["User", "UserProfile"]
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.contrib.auth.models import AbstractUser
|
from django.contrib.auth.models import AbstractUser
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
@ -9,9 +10,9 @@ class User(AbstractUser):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.userprofile.display_name:
|
try:
|
||||||
return self.userprofile.display_name
|
return self.userprofile.display_name
|
||||||
else:
|
except ObjectDoesNotExist:
|
||||||
return self.username
|
return self.username
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,4 +79,7 @@ class UserProfile(TimeStampedModel, ContactModel, AddressModel):
|
||||||
if self.display_name:
|
if self.display_name:
|
||||||
return self.display_name
|
return self.display_name
|
||||||
else:
|
else:
|
||||||
|
try:
|
||||||
return self.user.username
|
return self.user.username
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
return "No username"
|
||||||
|
|
|
@ -6,12 +6,19 @@ from .models import UserProfile
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=User)
|
@receiver(post_save, sender=User)
|
||||||
def create_profile(sender, instance, created, **kwargs):
|
def handle_profile(sender, instance, **kwargs):
|
||||||
if created:
|
|
||||||
|
"""Method for when a User is saved.
|
||||||
|
|
||||||
|
If the user is being created, then create a matching UserProfile. Otherwise
|
||||||
|
save an updated profile or create one if it doesn't exist.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if kwargs.get("created", False):
|
||||||
UserProfile.objects.create(user=instance)
|
UserProfile.objects.create(user=instance)
|
||||||
|
else:
|
||||||
|
# the user is not being created.
|
||||||
@receiver(post_save, sender=User)
|
if hasattr(instance, "userprofile"):
|
||||||
def save_profile(sender, instance, **kwargs):
|
|
||||||
# instance is a User, it has a profile from the one-to-one relation
|
|
||||||
instance.userprofile.save()
|
instance.userprofile.save()
|
||||||
|
else:
|
||||||
|
UserProfile.objects.create(user=instance)
|
||||||
|
|
|
@ -15,7 +15,6 @@ class HealthTest(TestCase):
|
||||||
|
|
||||||
|
|
||||||
class LoggedInTests(TestCase):
|
class LoggedInTests(TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
username = "test_user"
|
username = "test_user"
|
||||||
first_name = "First"
|
first_name = "First"
|
||||||
|
@ -24,7 +23,7 @@ class LoggedInTests(TestCase):
|
||||||
self.user = get_user_model().objects.create(
|
self.user = get_user_model().objects.create(
|
||||||
username=username, first_name=first_name, last_name=last_name, email=email
|
username=username, first_name=first_name, last_name=last_name, email=email
|
||||||
)
|
)
|
||||||
profile = UserProfile.objects.create(user=self.user)
|
self.profile = UserProfile.objects.create(user=self.user)
|
||||||
self.client.force_login(self.user)
|
self.client.force_login(self.user)
|
||||||
|
|
||||||
def test_edit_profile(self):
|
def test_edit_profile(self):
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
|
@ -8,13 +7,16 @@ from ..forms import EditProfileForm
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def edit_profile(request):
|
def edit_profile(request):
|
||||||
|
|
||||||
|
"""View for a profile editing page."""
|
||||||
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
# post to this view when changes are made
|
# post to this view when changes are made
|
||||||
profile_form = EditProfileForm(request.POST, instance=request.user.userprofile)
|
profile_form = EditProfileForm(request.POST, instance=request.user.userprofile)
|
||||||
if profile_form.is_valid():
|
if profile_form.is_valid():
|
||||||
profile_form.save()
|
profile_form.save()
|
||||||
messages.success(request, 'Your profile is updated successfully')
|
messages.success(request, "Your profile is updated successfully")
|
||||||
return redirect(to='edit-profile')
|
return redirect(to="edit-profile")
|
||||||
else:
|
else:
|
||||||
profile_form = EditProfileForm(instance=request.user.userprofile)
|
profile_form = EditProfileForm(instance=request.user.userprofile)
|
||||||
return render(request, 'profile.html', {'profile_form': profile_form})
|
return render(request, "profile.html", {"profile_form": profile_form})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue