From ed517aa258f4429a0793888320f4497aa867ca72 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Wed, 10 Apr 2024 15:38:08 -0700 Subject: [PATCH 01/20] Add initial straightforward field renames --- src/registrar/models/contact.py | 6 +++--- src/registrar/models/domain.py | 4 ++++ src/registrar/models/domain_information.py | 11 +++++++---- src/registrar/models/domain_request.py | 2 ++ src/registrar/models/draft_domain.py | 1 + src/registrar/models/host.py | 1 + src/registrar/models/transition_domain.py | 9 ++++++--- src/registrar/models/user.py | 1 + src/registrar/models/user_group.py | 4 ++-- 9 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/registrar/models/contact.py b/src/registrar/models/contact.py index 6bc20ebeb..2b1955c09 100644 --- a/src/registrar/models/contact.py +++ b/src/registrar/models/contact.py @@ -18,7 +18,7 @@ class Contact(TimeStampedModel): first_name = models.CharField( null=True, blank=True, - verbose_name="first name / given name", + verbose_name="First name", db_index=True, ) middle_name = models.CharField( @@ -28,13 +28,13 @@ class Contact(TimeStampedModel): last_name = models.CharField( null=True, blank=True, - verbose_name="last name / family name", + verbose_name="Last Name", db_index=True, ) title = models.CharField( null=True, blank=True, - verbose_name="title or role in your organization", + verbose_name="Title / role", ) email = models.EmailField( null=True, diff --git a/src/registrar/models/domain.py b/src/registrar/models/domain.py index 079fce3bc..08026ea6e 100644 --- a/src/registrar/models/domain.py +++ b/src/registrar/models/domain.py @@ -992,6 +992,7 @@ class Domain(TimeStampedModel, DomainHelper): blank=False, default=None, # prevent saving without a value unique=True, + verbose_name="Domain", help_text="Fully qualified domain name", ) @@ -1000,6 +1001,7 @@ class Domain(TimeStampedModel, DomainHelper): choices=State.choices, default=State.UNKNOWN, protected=True, # cannot change state directly, particularly in Django admin + verbose_name="Domain state", help_text="Very basic info about the lifecycle of this domain object", ) @@ -1017,12 +1019,14 @@ class Domain(TimeStampedModel, DomainHelper): deleted = DateField( null=True, editable=False, + verbose_name="Deleted on", help_text="Deleted at date", ) first_ready = DateField( null=True, editable=False, + verbose_name="First ready on", help_text="The last time this domain moved into the READY state", ) diff --git a/src/registrar/models/domain_information.py b/src/registrar/models/domain_information.py index 2ed27504c..0e4d563fd 100644 --- a/src/registrar/models/domain_information.py +++ b/src/registrar/models/domain_information.py @@ -62,6 +62,7 @@ class DomainInformation(TimeStampedModel): is_election_board = models.BooleanField( null=True, blank=True, + verbose_name="Election office", help_text="Is your organization an election office?", ) @@ -121,13 +122,13 @@ class DomainInformation(TimeStampedModel): null=True, blank=True, help_text="Street address", - verbose_name="Street address", + verbose_name="Address line 1", ) address_line2 = models.CharField( null=True, blank=True, help_text="Street address line 2 (optional)", - verbose_name="Street address line 2 (optional)", + verbose_name="Address line 2", ) city = models.CharField( null=True, @@ -139,21 +140,22 @@ class DomainInformation(TimeStampedModel): choices=StateTerritoryChoices.choices, null=True, blank=True, + verbose_name="State / territory", help_text="State, territory, or military post", - verbose_name="State, territory, or military post", ) zipcode = models.CharField( max_length=10, null=True, blank=True, help_text="Zip code", + verbose_name="Zip code", db_index=True, ) urbanization = models.CharField( null=True, blank=True, help_text="Urbanization (required for Puerto Rico only)", - verbose_name="Urbanization (required for Puerto Rico only)", + verbose_name="Urbanization", ) about_your_organization = models.TextField( @@ -177,6 +179,7 @@ class DomainInformation(TimeStampedModel): null=True, # Access this information via Domain as "domain.domain_info" related_name="domain_info", + verbose_name="Domain request", help_text="Domain to which this information belongs", ) diff --git a/src/registrar/models/domain_request.py b/src/registrar/models/domain_request.py index bd529f7e6..0f52038b8 100644 --- a/src/registrar/models/domain_request.py +++ b/src/registrar/models/domain_request.py @@ -550,12 +550,14 @@ class DomainRequest(TimeStampedModel): choices=StateTerritoryChoices.choices, null=True, blank=True, + verbose_name="State / territory", help_text="State, territory, or military post", ) zipcode = models.CharField( max_length=10, null=True, blank=True, + verbose_name="Zip code", help_text="Zip code", db_index=True, ) diff --git a/src/registrar/models/draft_domain.py b/src/registrar/models/draft_domain.py index fc70a18f3..fbc35eba1 100644 --- a/src/registrar/models/draft_domain.py +++ b/src/registrar/models/draft_domain.py @@ -18,5 +18,6 @@ class DraftDomain(TimeStampedModel, DomainHelper): max_length=253, blank=False, default=None, # prevent saving without a value + verbose_name="Requested domain", help_text="Fully qualified domain name", ) diff --git a/src/registrar/models/host.py b/src/registrar/models/host.py index 3b966832f..894b99b0f 100644 --- a/src/registrar/models/host.py +++ b/src/registrar/models/host.py @@ -21,6 +21,7 @@ class Host(TimeStampedModel): blank=False, default=None, # prevent saving without a value unique=False, + verbose_name="Host name", help_text="Fully qualified domain name", ) diff --git a/src/registrar/models/transition_domain.py b/src/registrar/models/transition_domain.py index eafbeda00..894aed2b1 100644 --- a/src/registrar/models/transition_domain.py +++ b/src/registrar/models/transition_domain.py @@ -26,7 +26,7 @@ class TransitionDomain(TimeStampedModel): domain_name = models.CharField( null=True, blank=True, - verbose_name="Domain name", + verbose_name="Domain", ) status = models.CharField( max_length=255, @@ -83,8 +83,8 @@ class TransitionDomain(TimeStampedModel): first_name = models.CharField( null=True, blank=True, - help_text="First name", - verbose_name="first name / given name", + help_text="First name / given name", + verbose_name="First name", db_index=True, ) middle_name = models.CharField( @@ -100,6 +100,7 @@ class TransitionDomain(TimeStampedModel): title = models.CharField( null=True, blank=True, + verbose_name="Title / role", help_text="Title", ) email = models.EmailField( @@ -126,12 +127,14 @@ class TransitionDomain(TimeStampedModel): max_length=2, null=True, blank=True, + verbose_name="State / territory", help_text="State, territory, or military post", ) zipcode = models.CharField( max_length=10, null=True, blank=True, + verbose_name="Zip code", help_text="Zip code", db_index=True, ) diff --git a/src/registrar/models/user.py b/src/registrar/models/user.py index bf904a044..1c987d44d 100644 --- a/src/registrar/models/user.py +++ b/src/registrar/models/user.py @@ -32,6 +32,7 @@ class User(AbstractUser): default=None, # Set the default value to None null=True, # Allow the field to be null blank=True, # Allow the field to be blank + verbose_name="User status" ) domains = models.ManyToManyField( diff --git a/src/registrar/models/user_group.py b/src/registrar/models/user_group.py index 82179f8dc..fe5b0395a 100644 --- a/src/registrar/models/user_group.py +++ b/src/registrar/models/user_group.py @@ -11,8 +11,8 @@ class UserGroup(Group): """ class Meta: - verbose_name = "User group" - verbose_name_plural = "User groups" + verbose_name = "Group" + verbose_name_plural = "Groups" def create_cisa_analyst_group(apps, schema_editor): """This method gets run from a data migration.""" From d419bf7d2a37badaecd68322a200e7c13e5a27eb Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Fri, 12 Apr 2024 16:39:22 -0700 Subject: [PATCH 02/20] Update more table field names --- src/registrar/models/domain_information.py | 1 + src/registrar/models/domain_request.py | 2 ++ src/registrar/models/host_ip.py | 1 + src/registrar/models/user_group.py | 4 ++-- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/registrar/models/domain_information.py b/src/registrar/models/domain_information.py index 0e4d563fd..0cac9269c 100644 --- a/src/registrar/models/domain_information.py +++ b/src/registrar/models/domain_information.py @@ -109,6 +109,7 @@ class DomainInformation(TimeStampedModel): is_election_board = models.BooleanField( null=True, blank=True, + verbose_name="Election office", help_text="Is your organization an election office?", ) diff --git a/src/registrar/models/domain_request.py b/src/registrar/models/domain_request.py index 0f52038b8..6b8a61f68 100644 --- a/src/registrar/models/domain_request.py +++ b/src/registrar/models/domain_request.py @@ -478,6 +478,7 @@ class DomainRequest(TimeStampedModel): is_election_board = models.BooleanField( null=True, blank=True, + verbose_name="Election office", help_text="Is your organization an election office?", ) @@ -659,6 +660,7 @@ class DomainRequest(TimeStampedModel): null=True, blank=True, default=None, + verbose_name="Submitted at", help_text="Date submitted", ) diff --git a/src/registrar/models/host_ip.py b/src/registrar/models/host_ip.py index 777d14430..216ad9eca 100644 --- a/src/registrar/models/host_ip.py +++ b/src/registrar/models/host_ip.py @@ -20,6 +20,7 @@ class HostIP(TimeStampedModel): blank=False, default=None, # prevent saving without a value validators=[validate_ipv46_address], + verbose_name="IP address", help_text="IP address", ) diff --git a/src/registrar/models/user_group.py b/src/registrar/models/user_group.py index fe5b0395a..82179f8dc 100644 --- a/src/registrar/models/user_group.py +++ b/src/registrar/models/user_group.py @@ -11,8 +11,8 @@ class UserGroup(Group): """ class Meta: - verbose_name = "Group" - verbose_name_plural = "Groups" + verbose_name = "User group" + verbose_name_plural = "User groups" def create_cisa_analyst_group(apps, schema_editor): """This method gets run from a data migration.""" From 6bce068e962deca5510f25a1dfdebba9eced457a Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Mon, 15 Apr 2024 14:58:28 -0700 Subject: [PATCH 03/20] Change display name of Contact to Name in admin --- src/registrar/admin.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 05bfc06b6..cd08719c1 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -661,7 +661,7 @@ class ContactAdmin(ListHeaderAdmin): search_fields = ["email", "first_name", "last_name"] search_help_text = "Search by firstname, lastname or email." list_display = [ - "contact", + "name", "email", ] # this ordering effects the ordering of results @@ -679,10 +679,10 @@ class ContactAdmin(ListHeaderAdmin): change_form_template = "django/admin/email_clipboard_change_form.html" - # We name the custom prop 'contact' because linter + # We name the custom prop 'name' because linter # is not allowing a short_description attr on it # This gets around the linter limitation, for now. - def contact(self, obj: models.Contact): + def name(self, obj: models.Contact): """Duplicate the contact _str_""" if obj.first_name or obj.last_name: return obj.get_formatted_name() @@ -693,7 +693,7 @@ class ContactAdmin(ListHeaderAdmin): else: return "" - contact.admin_order_field = "first_name" # type: ignore + name.admin_order_field = "first_name" # type: ignore # Read only that we'll leverage for CISA Analysts analyst_readonly_fields = [ From 49a107e02742356df6b265d7a8b2a9c9b1058afb Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Mon, 15 Apr 2024 15:48:23 -0700 Subject: [PATCH 04/20] Convert created to created_at in log entry admin --- src/registrar/admin.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/registrar/admin.py b/src/registrar/admin.py index cd08719c1..36e6e75f5 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -290,6 +290,13 @@ class CustomLogEntryAdmin(LogEntryAdmin): # Return the field value without a link return f"{obj.content_type} - {obj.object_repr}" + # We name the custom prop 'created_at' because linter + # is not allowing a short_description attr on it + # This gets around the linter limitation, for now. + @admin.display(description=_("Created at")) + def created(self, obj): + return obj.timestamp + search_help_text = "Search by resource, changes, or user." change_form_template = "admin/change_form_no_submit.html" From a76c4536f000a6d9eed2694c204d2929827f964b Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Mon, 15 Apr 2024 15:49:47 -0700 Subject: [PATCH 05/20] Change State / territory label in domain admin --- src/registrar/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 36e6e75f5..2c754e4e0 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -1631,6 +1631,7 @@ class DomainAdmin(ListHeaderAdmin): city.admin_order_field = "domain_info__city" # type: ignore + @admin.display(description=_("State / territory")) def state_territory(self, obj): return obj.domain_info.state_territory if obj.domain_info else None From d81a9169414bb640ff4f181a8d70fe3b38f05544 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Mon, 15 Apr 2024 16:52:23 -0700 Subject: [PATCH 06/20] Capitalization on verbose_name --- src/registrar/models/domain_request.py | 2 +- src/registrar/models/user.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/registrar/models/domain_request.py b/src/registrar/models/domain_request.py index 6b8a61f68..36b88b83f 100644 --- a/src/registrar/models/domain_request.py +++ b/src/registrar/models/domain_request.py @@ -478,7 +478,7 @@ class DomainRequest(TimeStampedModel): is_election_board = models.BooleanField( null=True, blank=True, - verbose_name="Election office", + verbose_name="election office", help_text="Is your organization an election office?", ) diff --git a/src/registrar/models/user.py b/src/registrar/models/user.py index f1610831e..6a9aeaa7c 100644 --- a/src/registrar/models/user.py +++ b/src/registrar/models/user.py @@ -33,7 +33,7 @@ class User(AbstractUser): default=None, # Set the default value to None null=True, # Allow the field to be null blank=True, # Allow the field to be blank - verbose_name="User status" + verbose_name="User status", ) domains = models.ManyToManyField( From bbbdabb7240d1794c326b6782f91de887e0430f8 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Mon, 15 Apr 2024 16:56:11 -0700 Subject: [PATCH 07/20] Capitalization on user model --- src/registrar/models/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/registrar/models/user.py b/src/registrar/models/user.py index 6a9aeaa7c..cf027e70c 100644 --- a/src/registrar/models/user.py +++ b/src/registrar/models/user.py @@ -33,7 +33,7 @@ class User(AbstractUser): default=None, # Set the default value to None null=True, # Allow the field to be null blank=True, # Allow the field to be blank - verbose_name="User status", + verbose_name="user status", ) domains = models.ManyToManyField( From f33fbcd41d99af71e2800d5de5de10c1c3c2d022 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Tue, 16 Apr 2024 09:55:44 -0700 Subject: [PATCH 08/20] Update search help text --- src/registrar/admin.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 2c754e4e0..bac143c37 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -568,6 +568,7 @@ class MyUserAdmin(BaseUserAdmin): # this ordering effects the ordering of results # in autocomplete_fields for user ordering = ["first_name", "last_name", "email"] + search_help_text = "Search by first name, last name, or email." change_form_template = "django/admin/email_clipboard_change_form.html" @@ -658,7 +659,7 @@ class MyHostAdmin(AuditedAdmin): """Custom host admin class to use our inlines.""" search_fields = ["name", "domain__name"] - search_help_text = "Search by domain or hostname." + search_help_text = "Search by domain or host name." inlines = [HostIPInline] @@ -666,7 +667,7 @@ class ContactAdmin(ListHeaderAdmin): """Custom contact admin class to add search.""" search_fields = ["email", "first_name", "last_name"] - search_help_text = "Search by firstname, lastname or email." + search_help_text = "Search by first name, last name or email." list_display = [ "name", "email", @@ -858,7 +859,7 @@ class UserDomainRoleAdmin(ListHeaderAdmin): "domain__name", "role", ] - search_help_text = "Search by firstname, lastname, email, domain, or role." + search_help_text = "Search by first name, last name, email, domain, or role." autocomplete_fields = ["user", "domain"] From f37d98df58a81e7e74b33c6cdd4e34a260e81f68 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Tue, 16 Apr 2024 10:55:16 -0700 Subject: [PATCH 09/20] Update User, UserGroup form field names --- src/registrar/admin.py | 42 ++++++++++++++++++++++++-- src/registrar/models/domain_request.py | 2 +- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/registrar/admin.py b/src/registrar/admin.py index bac143c37..2e0f05e32 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -485,7 +485,7 @@ class MyUserAdmin(BaseUserAdmin): list_display = ( "username", - "email", + "overridden_email_field", "first_name", "last_name", # Group is a custom property defined within this file, @@ -494,6 +494,18 @@ class MyUserAdmin(BaseUserAdmin): "status", ) + # Renames inherited AbstractUser label 'email_address to 'email' + def formfield_for_dbfield(self, dbfield, **kwargs): + field = super().formfield_for_dbfield(dbfield, **kwargs) + if dbfield.name == 'email': + field.label = 'Email' + return field + + # Renames inherited AbstractUser column name 'email_address to 'email' + @admin.display(description=_("Email")) + def overridden_email_field(self, obj): + return obj.email + fieldsets = ( ( None, @@ -2021,13 +2033,39 @@ class FederalAgencyAdmin(ListHeaderAdmin): ordering = ["agency"] +class UserGroupAdmin(AuditedAdmin): + """Overwrite the generated UserGroup admin class""" + + list_display = [ + "user_group" + ] + + fieldsets = ( + (None, {'fields': ('name', 'permissions')}), + ) + + def formfield_for_dbfield(self, dbfield, **kwargs): + field = super().formfield_for_dbfield(dbfield, **kwargs) + if dbfield.name == 'name': + field.label = 'Group name' + if dbfield.name == 'permissions': + field.label = "User permissions" + return field + + # We name the custom prop 'Group' because linter + # is not allowing a short_description attr on it + # This gets around the linter limitation, for now. + @admin.display(description=_("Group")) + def user_group(self, obj): + return obj.name + admin.site.unregister(LogEntry) # Unregister the default registration admin.site.register(LogEntry, CustomLogEntryAdmin) admin.site.register(models.User, MyUserAdmin) # Unregister the built-in Group model admin.site.unregister(Group) # Register UserGroup -admin.site.register(models.UserGroup) +admin.site.register(models.UserGroup, UserGroupAdmin) admin.site.register(models.UserDomainRole, UserDomainRoleAdmin) admin.site.register(models.Contact, ContactAdmin) admin.site.register(models.DomainInvitation, DomainInvitationAdmin) diff --git a/src/registrar/models/domain_request.py b/src/registrar/models/domain_request.py index 36b88b83f..6b8a61f68 100644 --- a/src/registrar/models/domain_request.py +++ b/src/registrar/models/domain_request.py @@ -478,7 +478,7 @@ class DomainRequest(TimeStampedModel): is_election_board = models.BooleanField( null=True, blank=True, - verbose_name="election office", + verbose_name="Election office", help_text="Is your organization an election office?", ) From 12526c13f79993b3eef7036e07661044c85a1047 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:13:05 -0700 Subject: [PATCH 10/20] Lowercase verbose_names to fit django standards --- src/registrar/models/domain.py | 8 ++++---- src/registrar/models/domain_information.py | 16 ++++++++-------- src/registrar/models/domain_request.py | 8 ++++---- src/registrar/models/draft_domain.py | 2 +- src/registrar/models/host.py | 2 +- src/registrar/models/transition_domain.py | 16 ++++++++-------- 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/registrar/models/domain.py b/src/registrar/models/domain.py index 08026ea6e..12994ea0e 100644 --- a/src/registrar/models/domain.py +++ b/src/registrar/models/domain.py @@ -992,7 +992,7 @@ class Domain(TimeStampedModel, DomainHelper): blank=False, default=None, # prevent saving without a value unique=True, - verbose_name="Domain", + verbose_name="domain", help_text="Fully qualified domain name", ) @@ -1001,7 +1001,7 @@ class Domain(TimeStampedModel, DomainHelper): choices=State.choices, default=State.UNKNOWN, protected=True, # cannot change state directly, particularly in Django admin - verbose_name="Domain state", + verbose_name="domain state", help_text="Very basic info about the lifecycle of this domain object", ) @@ -1019,14 +1019,14 @@ class Domain(TimeStampedModel, DomainHelper): deleted = DateField( null=True, editable=False, - verbose_name="Deleted on", + verbose_name="deleted on", help_text="Deleted at date", ) first_ready = DateField( null=True, editable=False, - verbose_name="First ready on", + verbose_name="first ready on", help_text="The last time this domain moved into the READY state", ) diff --git a/src/registrar/models/domain_information.py b/src/registrar/models/domain_information.py index 0cac9269c..ef0d17569 100644 --- a/src/registrar/models/domain_information.py +++ b/src/registrar/models/domain_information.py @@ -62,7 +62,7 @@ class DomainInformation(TimeStampedModel): is_election_board = models.BooleanField( null=True, blank=True, - verbose_name="Election office", + verbose_name="election office", help_text="Is your organization an election office?", ) @@ -109,7 +109,7 @@ class DomainInformation(TimeStampedModel): is_election_board = models.BooleanField( null=True, blank=True, - verbose_name="Election office", + verbose_name="election office", help_text="Is your organization an election office?", ) @@ -123,13 +123,13 @@ class DomainInformation(TimeStampedModel): null=True, blank=True, help_text="Street address", - verbose_name="Address line 1", + verbose_name="address line 1", ) address_line2 = models.CharField( null=True, blank=True, help_text="Street address line 2 (optional)", - verbose_name="Address line 2", + verbose_name="address line 2", ) city = models.CharField( null=True, @@ -141,7 +141,7 @@ class DomainInformation(TimeStampedModel): choices=StateTerritoryChoices.choices, null=True, blank=True, - verbose_name="State / territory", + verbose_name="state / territory", help_text="State, territory, or military post", ) zipcode = models.CharField( @@ -149,14 +149,14 @@ class DomainInformation(TimeStampedModel): null=True, blank=True, help_text="Zip code", - verbose_name="Zip code", + verbose_name="zip code", db_index=True, ) urbanization = models.CharField( null=True, blank=True, help_text="Urbanization (required for Puerto Rico only)", - verbose_name="Urbanization", + verbose_name="urbanization", ) about_your_organization = models.TextField( @@ -180,7 +180,7 @@ class DomainInformation(TimeStampedModel): null=True, # Access this information via Domain as "domain.domain_info" related_name="domain_info", - verbose_name="Domain request", + verbose_name="domain request", help_text="Domain to which this information belongs", ) diff --git a/src/registrar/models/domain_request.py b/src/registrar/models/domain_request.py index 6b8a61f68..16605e12e 100644 --- a/src/registrar/models/domain_request.py +++ b/src/registrar/models/domain_request.py @@ -478,7 +478,7 @@ class DomainRequest(TimeStampedModel): is_election_board = models.BooleanField( null=True, blank=True, - verbose_name="Election office", + verbose_name="election office", help_text="Is your organization an election office?", ) @@ -551,14 +551,14 @@ class DomainRequest(TimeStampedModel): choices=StateTerritoryChoices.choices, null=True, blank=True, - verbose_name="State / territory", + verbose_name="state / territory", help_text="State, territory, or military post", ) zipcode = models.CharField( max_length=10, null=True, blank=True, - verbose_name="Zip code", + verbose_name="zip code", help_text="Zip code", db_index=True, ) @@ -660,7 +660,7 @@ class DomainRequest(TimeStampedModel): null=True, blank=True, default=None, - verbose_name="Submitted at", + verbose_name="submitted at", help_text="Date submitted", ) diff --git a/src/registrar/models/draft_domain.py b/src/registrar/models/draft_domain.py index fbc35eba1..16fb1de33 100644 --- a/src/registrar/models/draft_domain.py +++ b/src/registrar/models/draft_domain.py @@ -18,6 +18,6 @@ class DraftDomain(TimeStampedModel, DomainHelper): max_length=253, blank=False, default=None, # prevent saving without a value - verbose_name="Requested domain", + verbose_name="requested domain", help_text="Fully qualified domain name", ) diff --git a/src/registrar/models/host.py b/src/registrar/models/host.py index 894b99b0f..2fb4b980b 100644 --- a/src/registrar/models/host.py +++ b/src/registrar/models/host.py @@ -21,7 +21,7 @@ class Host(TimeStampedModel): blank=False, default=None, # prevent saving without a value unique=False, - verbose_name="Host name", + verbose_name="host name", help_text="Fully qualified domain name", ) diff --git a/src/registrar/models/transition_domain.py b/src/registrar/models/transition_domain.py index 894aed2b1..2dafd6da4 100644 --- a/src/registrar/models/transition_domain.py +++ b/src/registrar/models/transition_domain.py @@ -20,13 +20,13 @@ class TransitionDomain(TimeStampedModel): username = models.CharField( null=False, blank=False, - verbose_name="Username", + verbose_name="username", help_text="Username - this will be an email address", ) domain_name = models.CharField( null=True, blank=True, - verbose_name="Domain", + verbose_name="domain", ) status = models.CharField( max_length=255, @@ -34,7 +34,7 @@ class TransitionDomain(TimeStampedModel): blank=True, default=StatusChoices.READY, choices=StatusChoices.choices, - verbose_name="Status", + verbose_name="status", help_text="domain status during the transfer", ) email_sent = models.BooleanField( @@ -46,7 +46,7 @@ class TransitionDomain(TimeStampedModel): processed = models.BooleanField( null=False, default=True, - verbose_name="Processed", + verbose_name="processed", help_text="Indicates whether this TransitionDomain was already processed", ) generic_org_type = models.CharField( @@ -84,7 +84,7 @@ class TransitionDomain(TimeStampedModel): null=True, blank=True, help_text="First name / given name", - verbose_name="First name", + verbose_name="first name", db_index=True, ) middle_name = models.CharField( @@ -100,7 +100,7 @@ class TransitionDomain(TimeStampedModel): title = models.CharField( null=True, blank=True, - verbose_name="Title / role", + verbose_name="title / role", help_text="Title", ) email = models.EmailField( @@ -127,14 +127,14 @@ class TransitionDomain(TimeStampedModel): max_length=2, null=True, blank=True, - verbose_name="State / territory", + verbose_name="state / territory", help_text="State, territory, or military post", ) zipcode = models.CharField( max_length=10, null=True, blank=True, - verbose_name="Zip code", + verbose_name="zip code", help_text="Zip code", db_index=True, ) From aa142813385a72dfae17ca3f95f401035a5d94b6 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:17:11 -0700 Subject: [PATCH 11/20] Add changes to admin --- src/registrar/admin.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 2e0f05e32..8776f81d0 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -497,8 +497,8 @@ class MyUserAdmin(BaseUserAdmin): # Renames inherited AbstractUser label 'email_address to 'email' def formfield_for_dbfield(self, dbfield, **kwargs): field = super().formfield_for_dbfield(dbfield, **kwargs) - if dbfield.name == 'email': - field.label = 'Email' + if dbfield.name == "email": + field.label = "Email" return field # Renames inherited AbstractUser column name 'email_address to 'email' @@ -2036,19 +2036,15 @@ class FederalAgencyAdmin(ListHeaderAdmin): class UserGroupAdmin(AuditedAdmin): """Overwrite the generated UserGroup admin class""" - list_display = [ - "user_group" - ] + list_display = ["user_group"] - fieldsets = ( - (None, {'fields': ('name', 'permissions')}), - ) + fieldsets = ((None, {"fields": ("name", "permissions")}),) def formfield_for_dbfield(self, dbfield, **kwargs): field = super().formfield_for_dbfield(dbfield, **kwargs) - if dbfield.name == 'name': - field.label = 'Group name' - if dbfield.name == 'permissions': + if dbfield.name == "name": + field.label = "Group name" + if dbfield.name == "permissions": field.label = "User permissions" return field @@ -2059,6 +2055,7 @@ class UserGroupAdmin(AuditedAdmin): def user_group(self, obj): return obj.name + admin.site.unregister(LogEntry) # Unregister the default registration admin.site.register(LogEntry, CustomLogEntryAdmin) admin.site.register(models.User, MyUserAdmin) From c153f43467852fcc7457c238f69c03614357fdff Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:29:00 -0700 Subject: [PATCH 12/20] Add updated migrations file --- ...t_name_alter_contact_last_name_and_more.py | 396 ++++++++++++++++++ 1 file changed, 396 insertions(+) create mode 100644 src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py diff --git a/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py b/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py new file mode 100644 index 000000000..30627f4b4 --- /dev/null +++ b/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py @@ -0,0 +1,396 @@ +# Generated by Django 4.2.10 on 2024-04-16 18:28 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import django_fsm +import registrar.models.utility.domain_field + + +class Migration(migrations.Migration): + + dependencies = [ + ("registrar", "0084_create_groups_v11"), + ] + + operations = [ + migrations.AlterField( + model_name="contact", + name="first_name", + field=models.CharField(blank=True, db_index=True, null=True, verbose_name="First name"), + ), + migrations.AlterField( + model_name="contact", + name="last_name", + field=models.CharField(blank=True, db_index=True, null=True, verbose_name="Last Name"), + ), + migrations.AlterField( + model_name="contact", + name="title", + field=models.CharField(blank=True, null=True, verbose_name="Title / role"), + ), + migrations.AlterField( + model_name="domain", + name="deleted", + field=models.DateField(editable=False, help_text="Deleted at date", null=True, verbose_name="deleted on"), + ), + migrations.AlterField( + model_name="domain", + name="first_ready", + field=models.DateField( + editable=False, + help_text="The last time this domain moved into the READY state", + null=True, + verbose_name="first ready on", + ), + ), + migrations.AlterField( + model_name="domain", + name="name", + field=registrar.models.utility.domain_field.DomainField( + default=None, + help_text="Fully qualified domain name", + max_length=253, + unique=True, + verbose_name="domain", + ), + ), + migrations.AlterField( + model_name="domain", + name="state", + field=django_fsm.FSMField( + choices=[ + ("unknown", "Unknown"), + ("dns needed", "Dns needed"), + ("ready", "Ready"), + ("on hold", "On hold"), + ("deleted", "Deleted"), + ], + default="unknown", + help_text="Very basic info about the lifecycle of this domain object", + max_length=21, + protected=True, + verbose_name="domain state", + ), + ), + migrations.AlterField( + model_name="domaininformation", + name="address_line1", + field=models.CharField(blank=True, help_text="Street address", null=True, verbose_name="address line 1"), + ), + migrations.AlterField( + model_name="domaininformation", + name="address_line2", + field=models.CharField( + blank=True, help_text="Street address line 2 (optional)", null=True, verbose_name="address line 2" + ), + ), + migrations.AlterField( + model_name="domaininformation", + name="domain", + field=models.OneToOneField( + blank=True, + help_text="Domain to which this information belongs", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="domain_info", + to="registrar.domain", + verbose_name="domain request", + ), + ), + migrations.AlterField( + model_name="domaininformation", + name="is_election_board", + field=models.BooleanField( + blank=True, + help_text="Is your organization an election office?", + null=True, + verbose_name="election office", + ), + ), + migrations.AlterField( + model_name="domaininformation", + name="state_territory", + field=models.CharField( + blank=True, + choices=[ + ("AL", "Alabama (AL)"), + ("AK", "Alaska (AK)"), + ("AS", "American Samoa (AS)"), + ("AZ", "Arizona (AZ)"), + ("AR", "Arkansas (AR)"), + ("CA", "California (CA)"), + ("CO", "Colorado (CO)"), + ("CT", "Connecticut (CT)"), + ("DE", "Delaware (DE)"), + ("DC", "District of Columbia (DC)"), + ("FL", "Florida (FL)"), + ("GA", "Georgia (GA)"), + ("GU", "Guam (GU)"), + ("HI", "Hawaii (HI)"), + ("ID", "Idaho (ID)"), + ("IL", "Illinois (IL)"), + ("IN", "Indiana (IN)"), + ("IA", "Iowa (IA)"), + ("KS", "Kansas (KS)"), + ("KY", "Kentucky (KY)"), + ("LA", "Louisiana (LA)"), + ("ME", "Maine (ME)"), + ("MD", "Maryland (MD)"), + ("MA", "Massachusetts (MA)"), + ("MI", "Michigan (MI)"), + ("MN", "Minnesota (MN)"), + ("MS", "Mississippi (MS)"), + ("MO", "Missouri (MO)"), + ("MT", "Montana (MT)"), + ("NE", "Nebraska (NE)"), + ("NV", "Nevada (NV)"), + ("NH", "New Hampshire (NH)"), + ("NJ", "New Jersey (NJ)"), + ("NM", "New Mexico (NM)"), + ("NY", "New York (NY)"), + ("NC", "North Carolina (NC)"), + ("ND", "North Dakota (ND)"), + ("MP", "Northern Mariana Islands (MP)"), + ("OH", "Ohio (OH)"), + ("OK", "Oklahoma (OK)"), + ("OR", "Oregon (OR)"), + ("PA", "Pennsylvania (PA)"), + ("PR", "Puerto Rico (PR)"), + ("RI", "Rhode Island (RI)"), + ("SC", "South Carolina (SC)"), + ("SD", "South Dakota (SD)"), + ("TN", "Tennessee (TN)"), + ("TX", "Texas (TX)"), + ("UM", "United States Minor Outlying Islands (UM)"), + ("UT", "Utah (UT)"), + ("VT", "Vermont (VT)"), + ("VI", "Virgin Islands (VI)"), + ("VA", "Virginia (VA)"), + ("WA", "Washington (WA)"), + ("WV", "West Virginia (WV)"), + ("WI", "Wisconsin (WI)"), + ("WY", "Wyoming (WY)"), + ("AA", "Armed Forces Americas (AA)"), + ("AE", "Armed Forces Africa, Canada, Europe, Middle East (AE)"), + ("AP", "Armed Forces Pacific (AP)"), + ], + help_text="State, territory, or military post", + max_length=2, + null=True, + verbose_name="state / territory", + ), + ), + migrations.AlterField( + model_name="domaininformation", + name="urbanization", + field=models.CharField( + blank=True, + help_text="Urbanization (required for Puerto Rico only)", + null=True, + verbose_name="urbanization", + ), + ), + migrations.AlterField( + model_name="domaininformation", + name="zipcode", + field=models.CharField( + blank=True, db_index=True, help_text="Zip code", max_length=10, null=True, verbose_name="zip code" + ), + ), + migrations.AlterField( + model_name="domainrequest", + name="is_election_board", + field=models.BooleanField( + blank=True, + help_text="Is your organization an election office?", + null=True, + verbose_name="election office", + ), + ), + migrations.AlterField( + model_name="domainrequest", + name="state_territory", + field=models.CharField( + blank=True, + choices=[ + ("AL", "Alabama (AL)"), + ("AK", "Alaska (AK)"), + ("AS", "American Samoa (AS)"), + ("AZ", "Arizona (AZ)"), + ("AR", "Arkansas (AR)"), + ("CA", "California (CA)"), + ("CO", "Colorado (CO)"), + ("CT", "Connecticut (CT)"), + ("DE", "Delaware (DE)"), + ("DC", "District of Columbia (DC)"), + ("FL", "Florida (FL)"), + ("GA", "Georgia (GA)"), + ("GU", "Guam (GU)"), + ("HI", "Hawaii (HI)"), + ("ID", "Idaho (ID)"), + ("IL", "Illinois (IL)"), + ("IN", "Indiana (IN)"), + ("IA", "Iowa (IA)"), + ("KS", "Kansas (KS)"), + ("KY", "Kentucky (KY)"), + ("LA", "Louisiana (LA)"), + ("ME", "Maine (ME)"), + ("MD", "Maryland (MD)"), + ("MA", "Massachusetts (MA)"), + ("MI", "Michigan (MI)"), + ("MN", "Minnesota (MN)"), + ("MS", "Mississippi (MS)"), + ("MO", "Missouri (MO)"), + ("MT", "Montana (MT)"), + ("NE", "Nebraska (NE)"), + ("NV", "Nevada (NV)"), + ("NH", "New Hampshire (NH)"), + ("NJ", "New Jersey (NJ)"), + ("NM", "New Mexico (NM)"), + ("NY", "New York (NY)"), + ("NC", "North Carolina (NC)"), + ("ND", "North Dakota (ND)"), + ("MP", "Northern Mariana Islands (MP)"), + ("OH", "Ohio (OH)"), + ("OK", "Oklahoma (OK)"), + ("OR", "Oregon (OR)"), + ("PA", "Pennsylvania (PA)"), + ("PR", "Puerto Rico (PR)"), + ("RI", "Rhode Island (RI)"), + ("SC", "South Carolina (SC)"), + ("SD", "South Dakota (SD)"), + ("TN", "Tennessee (TN)"), + ("TX", "Texas (TX)"), + ("UM", "United States Minor Outlying Islands (UM)"), + ("UT", "Utah (UT)"), + ("VT", "Vermont (VT)"), + ("VI", "Virgin Islands (VI)"), + ("VA", "Virginia (VA)"), + ("WA", "Washington (WA)"), + ("WV", "West Virginia (WV)"), + ("WI", "Wisconsin (WI)"), + ("WY", "Wyoming (WY)"), + ("AA", "Armed Forces Americas (AA)"), + ("AE", "Armed Forces Africa, Canada, Europe, Middle East (AE)"), + ("AP", "Armed Forces Pacific (AP)"), + ], + help_text="State, territory, or military post", + max_length=2, + null=True, + verbose_name="state / territory", + ), + ), + migrations.AlterField( + model_name="domainrequest", + name="submission_date", + field=models.DateField( + blank=True, default=None, help_text="Date submitted", null=True, verbose_name="submitted at" + ), + ), + migrations.AlterField( + model_name="domainrequest", + name="zipcode", + field=models.CharField( + blank=True, db_index=True, help_text="Zip code", max_length=10, null=True, verbose_name="zip code" + ), + ), + migrations.AlterField( + model_name="draftdomain", + name="name", + field=models.CharField( + default=None, help_text="Fully qualified domain name", max_length=253, verbose_name="requested domain" + ), + ), + migrations.AlterField( + model_name="host", + name="name", + field=models.CharField( + default=None, help_text="Fully qualified domain name", max_length=253, verbose_name="host name" + ), + ), + migrations.AlterField( + model_name="hostip", + name="address", + field=models.CharField( + default=None, + help_text="IP address", + max_length=46, + validators=[django.core.validators.validate_ipv46_address], + verbose_name="IP address", + ), + ), + migrations.AlterField( + model_name="transitiondomain", + name="domain_name", + field=models.CharField(blank=True, null=True, verbose_name="domain"), + ), + migrations.AlterField( + model_name="transitiondomain", + name="first_name", + field=models.CharField( + blank=True, db_index=True, help_text="First name / given name", null=True, verbose_name="first name" + ), + ), + migrations.AlterField( + model_name="transitiondomain", + name="processed", + field=models.BooleanField( + default=True, + help_text="Indicates whether this TransitionDomain was already processed", + verbose_name="processed", + ), + ), + migrations.AlterField( + model_name="transitiondomain", + name="state_territory", + field=models.CharField( + blank=True, + help_text="State, territory, or military post", + max_length=2, + null=True, + verbose_name="state / territory", + ), + ), + migrations.AlterField( + model_name="transitiondomain", + name="status", + field=models.CharField( + blank=True, + choices=[("ready", "Ready"), ("on hold", "On hold"), ("unknown", "Unknown")], + default="ready", + help_text="domain status during the transfer", + max_length=255, + verbose_name="status", + ), + ), + migrations.AlterField( + model_name="transitiondomain", + name="title", + field=models.CharField(blank=True, help_text="Title", null=True, verbose_name="title / role"), + ), + migrations.AlterField( + model_name="transitiondomain", + name="username", + field=models.CharField(help_text="Username - this will be an email address", verbose_name="username"), + ), + migrations.AlterField( + model_name="transitiondomain", + name="zipcode", + field=models.CharField( + blank=True, db_index=True, help_text="Zip code", max_length=10, null=True, verbose_name="zip code" + ), + ), + migrations.AlterField( + model_name="user", + name="status", + field=models.CharField( + blank=True, + choices=[("restricted", "restricted")], + default=None, + max_length=10, + null=True, + verbose_name="user status", + ), + ), + ] From 37bf09f7e83a451c10d4681f1af35fae6b6994e9 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Thu, 18 Apr 2024 09:01:22 -0700 Subject: [PATCH 13/20] Lowercase verbose names in contact model --- ...omaininformation_updated_federal_agency.py | 26 +++++++++++++++++++ src/registrar/models/contact.py | 4 +-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/registrar/migrations/0085_domaininformation_updated_federal_agency.py diff --git a/src/registrar/migrations/0085_domaininformation_updated_federal_agency.py b/src/registrar/migrations/0085_domaininformation_updated_federal_agency.py new file mode 100644 index 000000000..e471a61a5 --- /dev/null +++ b/src/registrar/migrations/0085_domaininformation_updated_federal_agency.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.10 on 2024-04-17 20:25 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("registrar", "0084_create_groups_v11"), + ] + + operations = [ + migrations.AddField( + model_name="domaininformation", + name="updated_federal_agency", + field=models.ForeignKey( + blank=True, + help_text="Associated federal agency", + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="domain_federal_agency", + to="registrar.federalagency", + ), + ), + ] diff --git a/src/registrar/models/contact.py b/src/registrar/models/contact.py index 6a082ecf2..32a099a8c 100644 --- a/src/registrar/models/contact.py +++ b/src/registrar/models/contact.py @@ -28,13 +28,13 @@ class Contact(TimeStampedModel): last_name = models.CharField( null=True, blank=True, - verbose_name="Last Name", + verbose_name="last name", db_index=True, ) title = models.CharField( null=True, blank=True, - verbose_name="Title / role", + verbose_name="title / role", ) email = models.EmailField( null=True, From e29ebc5b95ce723366ee59fc81523dc3416ff8dd Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Thu, 18 Apr 2024 09:05:53 -0700 Subject: [PATCH 14/20] Remove inaccurate verbose name on domain info --- src/registrar/models/domain_information.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/registrar/models/domain_information.py b/src/registrar/models/domain_information.py index ef0d17569..66b795ec5 100644 --- a/src/registrar/models/domain_information.py +++ b/src/registrar/models/domain_information.py @@ -180,7 +180,6 @@ class DomainInformation(TimeStampedModel): null=True, # Access this information via Domain as "domain.domain_info" related_name="domain_info", - verbose_name="domain request", help_text="Domain to which this information belongs", ) From c98bcb4b6f0c3c1c05b8aefff9349e6d547c16a2 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Thu, 18 Apr 2024 09:09:51 -0700 Subject: [PATCH 15/20] Remove conflicting migration --- ...omaininformation_updated_federal_agency.py | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 src/registrar/migrations/0085_domaininformation_updated_federal_agency.py diff --git a/src/registrar/migrations/0085_domaininformation_updated_federal_agency.py b/src/registrar/migrations/0085_domaininformation_updated_federal_agency.py deleted file mode 100644 index e471a61a5..000000000 --- a/src/registrar/migrations/0085_domaininformation_updated_federal_agency.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 4.2.10 on 2024-04-17 20:25 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ("registrar", "0084_create_groups_v11"), - ] - - operations = [ - migrations.AddField( - model_name="domaininformation", - name="updated_federal_agency", - field=models.ForeignKey( - blank=True, - help_text="Associated federal agency", - null=True, - on_delete=django.db.models.deletion.PROTECT, - related_name="domain_federal_agency", - to="registrar.federalagency", - ), - ), - ] From 009dd1bf190d3e4725677ed201e1345337444e09 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Thu, 18 Apr 2024 09:30:25 -0700 Subject: [PATCH 16/20] Rerun migrations --- ...t_name_alter_contact_last_name_and_more.py | 20 +++---------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py b/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py index 30627f4b4..32c63e7e7 100644 --- a/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py +++ b/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py @@ -1,8 +1,7 @@ -# Generated by Django 4.2.10 on 2024-04-16 18:28 +# Generated by Django 4.2.10 on 2024-04-18 16:30 import django.core.validators from django.db import migrations, models -import django.db.models.deletion import django_fsm import registrar.models.utility.domain_field @@ -22,12 +21,12 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="contact", name="last_name", - field=models.CharField(blank=True, db_index=True, null=True, verbose_name="Last Name"), + field=models.CharField(blank=True, db_index=True, null=True, verbose_name="last name"), ), migrations.AlterField( model_name="contact", name="title", - field=models.CharField(blank=True, null=True, verbose_name="Title / role"), + field=models.CharField(blank=True, null=True, verbose_name="title / role"), ), migrations.AlterField( model_name="domain", @@ -85,19 +84,6 @@ class Migration(migrations.Migration): blank=True, help_text="Street address line 2 (optional)", null=True, verbose_name="address line 2" ), ), - migrations.AlterField( - model_name="domaininformation", - name="domain", - field=models.OneToOneField( - blank=True, - help_text="Domain to which this information belongs", - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="domain_info", - to="registrar.domain", - verbose_name="domain request", - ), - ), migrations.AlterField( model_name="domaininformation", name="is_election_board", From f9fdbfe68a93e4faa470b3a3de3b46456bc22802 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:52:40 -0700 Subject: [PATCH 17/20] Lowercase first name field in contact model --- src/registrar/models/contact.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/registrar/models/contact.py b/src/registrar/models/contact.py index 32a099a8c..9deb22641 100644 --- a/src/registrar/models/contact.py +++ b/src/registrar/models/contact.py @@ -18,7 +18,7 @@ class Contact(TimeStampedModel): first_name = models.CharField( null=True, blank=True, - verbose_name="First name", + verbose_name="first name", db_index=True, ) middle_name = models.CharField( From c7e8e26828e358b13620cddf84439e9e7e6a076b Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Thu, 18 Apr 2024 11:02:23 -0700 Subject: [PATCH 18/20] Update migration file --- src/registrar/admin.py | 7 +++++++ ..._contact_first_name_alter_contact_last_name_and_more.py | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/registrar/admin.py b/src/registrar/admin.py index e3fddf401..513502630 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -1987,6 +1987,13 @@ class DraftDomainAdmin(ListHeaderAdmin): # this ordering effects the ordering of results # in autocomplete_fields for user ordering = ["name"] + list_display = [ + "name" + ] + + @admin.display(description=_("Requested domain")) + def name(self, obj): + return obj.name def get_model_perms(self, request): """ diff --git a/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py b/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py index 32c63e7e7..a0365c284 100644 --- a/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py +++ b/src/registrar/migrations/0085_alter_contact_first_name_alter_contact_last_name_and_more.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.10 on 2024-04-18 16:30 +# Generated by Django 4.2.10 on 2024-04-18 18:01 import django.core.validators from django.db import migrations, models @@ -16,7 +16,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name="contact", name="first_name", - field=models.CharField(blank=True, db_index=True, null=True, verbose_name="First name"), + field=models.CharField(blank=True, db_index=True, null=True, verbose_name="first name"), ), migrations.AlterField( model_name="contact", From a964396c30831997b97b6cab16b14970c6de55dc Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Thu, 18 Apr 2024 11:15:12 -0700 Subject: [PATCH 19/20] Correct search text for User Domain Role table --- src/registrar/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 513502630..3ff469098 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -879,7 +879,7 @@ class UserDomainRoleAdmin(ListHeaderAdmin): "domain__name", "role", ] - search_help_text = "Search by first name, last name, email, domain, or role." + search_help_text = "Search by first name, last name, email, or domain." autocomplete_fields = ["user", "domain"] From 687d818a561b8566c02c1bfb18313df012843d54 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Thu, 18 Apr 2024 11:18:21 -0700 Subject: [PATCH 20/20] Fix linting error --- src/registrar/admin.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 3ff469098..decabe81a 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -1987,9 +1987,7 @@ class DraftDomainAdmin(ListHeaderAdmin): # this ordering effects the ordering of results # in autocomplete_fields for user ordering = ["name"] - list_display = [ - "name" - ] + list_display = ["name"] @admin.display(description=_("Requested domain")) def name(self, obj):