diff --git a/src/registrar/admin.py b/src/registrar/admin.py index d19231755..66215733c 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -4,29 +4,26 @@ from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.contenttypes.models import ContentType from django.http.response import HttpResponseRedirect from django.urls import reverse -from registrar.models.utility.admin_form_order_helper import AdminFormOrderHelper, SortingDictInterface # noqa +from registrar.models.utility.admin_form_order_helper import AdminFormOrderHelper, SortingDict +# Split up for the linter +from registrar.models.utility.admin_form_order_helper import SortingDict from . import models logger = logging.getLogger(__name__) -# The linter does not like the length of SortingDictInterface, so these are split here -audited_admin_item_names = ["submitter", "authorizing_official", - "investigator", "creator", "user"] -audited_admin_orderby_names = ['first_name', 'last_name'] -special_audited_admin_item_names = ["domain", "requested_domain"] -special_audited_admin_orderby_names = ["name"] # Used to keep track of how we want to order_by certain FKs -foreignkey_orderby_dict: list[SortingDictInterface] = [ +foreignkey_orderby_dict: list[SortingDict] = [ # foreign_key - order_by - SortingDictInterface( - audited_admin_item_names, - audited_admin_orderby_names - ).sorting_dict, + # Handles fields that are sorted by 'first_name / last_name + SortingDict( + ["submitter", "authorizing_official", "investigator", "creator", "user"], + ['first_name', 'last_name'] + ), # Handles fields that are sorted by 'name' - SortingDictInterface( - special_audited_admin_item_names, - special_audited_admin_orderby_names - ).sorting_dict + SortingDict( + ["domain", "requested_domain"], + ["name"] + ) ] diff --git a/src/registrar/models/utility/admin_form_order_helper.py b/src/registrar/models/utility/admin_form_order_helper.py index 2057a2276..fc16f5a31 100644 --- a/src/registrar/models/utility/admin_form_order_helper.py +++ b/src/registrar/models/utility/admin_form_order_helper.py @@ -5,16 +5,14 @@ from django.forms import ModelChoiceField logger = logging.getLogger(__name__) -class SortingDictInterface: - _model_list: Dict[type, type] = {} - _sort_list: list[type] = [] - sorting_dict: Dict[type, type] = {} +class SortingDict: + _sorting_dict: Dict[type, type] = {} - # _model_list and _sort_list can be - # any length, and will be called multiple times. - # We want the perf advantage of a dictionary, - # while making creating new SortingDictInterface - # items pretty straight forward and easy (aka as a list) + # model_list can be will be called multiple times. + # Not super necessary, but it'd be nice + # to have the perf advantage of a dictionary, + # while minimizing typing when + # adding a new SortingDict (input as a list) def convert_list_to_dict(self, value_list): dictionary: Dict[type, type] = {} for item in value_list: @@ -22,30 +20,37 @@ class SortingDictInterface: return dictionary def __init__(self, model_list, sort_list): - self.sorting_dict = { + self._sorting_dict = { "dropDownSelected": self.convert_list_to_dict(model_list), "sortBy": sort_list } + def get_dict(self): + # This should never happen so we need to log this + if self._sorting_dict is None: + raise ValueError("_sorting_dict was None") + return self._sorting_dict + class AdminFormOrderHelper(): """A helper class to order a dropdown field in Django Admin, takes the fields you want to order by as an array""" # Used to keep track of how we want to order_by certain FKs - _sorting_dict: list[SortingDictInterface] = [] + _sorting_list: list[SortingDict] = [] def __init__(self, sort): - self._sorting_dict = sort + self._sorting_list = sort def get_ordered_form_field(self, form_field, db_field) -> (ModelChoiceField | None): """Orders the queryset for a ModelChoiceField based on the order_by_dict dictionary""" _order_by_list = [] - for item in self._sorting_dict: - drop_down_selected = item["dropDownSelected"] - sort_by = item["sortBy"] + for item in self._sorting_list: + item_dict = item.get_dict() + drop_down_selected = item_dict.get("dropDownSelected") + sort_by = item_dict.get("sortBy") if db_field.name in drop_down_selected: _order_by_list = sort_by