mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-12 22:18:25 +02:00
cleanup
This commit is contained in:
parent
3073dd98f2
commit
75d5a951d7
3 changed files with 20 additions and 100 deletions
|
@ -45,22 +45,32 @@ class CustomLogEntryAdmin(LogEntryAdmin):
|
||||||
add_form_template = "admin/change_form_no_submit.html"
|
add_form_template = "admin/change_form_no_submit.html"
|
||||||
|
|
||||||
|
|
||||||
class AdminSortFields():
|
class AdminSortFields:
|
||||||
|
|
||||||
def get_queryset(db_field):
|
def get_queryset(db_field):
|
||||||
"""This is a helper function for formfield_for_manytomany and formfield_for_foreignkey"""
|
"""This is a helper function for formfield_for_manytomany and formfield_for_foreignkey"""
|
||||||
logger.info(f"getting queryset for {db_field.name}")
|
logger.info(f"getting queryset for {db_field.name}")
|
||||||
# customize sorting
|
# customize sorting
|
||||||
if db_field.name in ("other_contacts", "authorizing_official", "submitter",):
|
if db_field.name in (
|
||||||
|
"other_contacts",
|
||||||
|
"authorizing_official",
|
||||||
|
"submitter",
|
||||||
|
):
|
||||||
# Sort contacts by first_name, then last_name, then email
|
# Sort contacts by first_name, then last_name, then email
|
||||||
return models.Contact.objects.all().order_by(Concat("first_name", "last_name", "email"))
|
return models.Contact.objects.all().order_by(Concat("first_name", "last_name", "email"))
|
||||||
elif db_field.name in ("current_websites", "alternative_domains"):
|
elif db_field.name in ("current_websites", "alternative_domains"):
|
||||||
# sort web sites
|
# sort web sites
|
||||||
return models.Website.objects.all().order_by("website")
|
return models.Website.objects.all().order_by("website")
|
||||||
elif db_field.name in ("creator", "user", "investigator",):
|
elif db_field.name in (
|
||||||
|
"creator",
|
||||||
|
"user",
|
||||||
|
"investigator",
|
||||||
|
):
|
||||||
# Sort users by first_name, then last_name, then email
|
# Sort users by first_name, then last_name, then email
|
||||||
return models.User.objects.all().order_by(Concat("first_name", "last_name", "email"))
|
return models.User.objects.all().order_by(Concat("first_name", "last_name", "email"))
|
||||||
elif db_field.name in ("domain", "approved_domain",):
|
elif db_field.name in (
|
||||||
|
"domain",
|
||||||
|
"approved_domain",
|
||||||
|
):
|
||||||
# Sort domains by name
|
# Sort domains by name
|
||||||
return models.Domain.objects.all().order_by("name")
|
return models.Domain.objects.all().order_by("name")
|
||||||
elif db_field.name in ("requested_domain",):
|
elif db_field.name in ("requested_domain",):
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
import logging
|
|
||||||
from typing import Dict
|
|
||||||
from django.forms import ModelChoiceField
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class SortingDict:
|
|
||||||
"""Stores a sorting dictionary object"""
|
|
||||||
|
|
||||||
_sorting_dict: Dict[type, type] = {}
|
|
||||||
|
|
||||||
def __init__(self, model_list, sort_list):
|
|
||||||
self._sorting_dict = {
|
|
||||||
"dropDownSelected": self.convert_list_to_dict(model_list),
|
|
||||||
"sortBy": sort_list,
|
|
||||||
}
|
|
||||||
|
|
||||||
# Used in __init__ for model_list for performance reasons
|
|
||||||
def convert_list_to_dict(self, value_list):
|
|
||||||
"""Used internally to convert model_list to a dictionary"""
|
|
||||||
return {item: item for item in value_list}
|
|
||||||
|
|
||||||
def get_dict(self):
|
|
||||||
"""Grabs the associated dictionary item,
|
|
||||||
has two fields: 'dropDownSelected': model_list and 'sortBy': sort_list"""
|
|
||||||
# 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_list: list[SortingDict] = []
|
|
||||||
|
|
||||||
def __init__(self, sort: list[SortingDict]):
|
|
||||||
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_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
|
|
||||||
# Exit loop when order_by_list is found
|
|
||||||
break
|
|
||||||
|
|
||||||
# Only order if we choose to do so
|
|
||||||
# noqa for the linter... reduces readability otherwise
|
|
||||||
if _order_by_list is not None and _order_by_list != []: # noqa
|
|
||||||
form_field.queryset = form_field.queryset.order_by(*_order_by_list)
|
|
||||||
|
|
||||||
return form_field
|
|
|
@ -1,27 +0,0 @@
|
||||||
from registrar.models.utility.admin_form_order_helper import (
|
|
||||||
AdminFormOrderHelper,
|
|
||||||
SortingDict,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class AdminSortFields:
|
|
||||||
# Used to keep track of how we want to order_by certain FKs
|
|
||||||
foreignkey_orderby_dict: list[SortingDict] = [
|
|
||||||
# foreign_key - order_by
|
|
||||||
# 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'
|
|
||||||
SortingDict(["domain", "requested_domain"], ["name"]),
|
|
||||||
SortingDict(["domain_application"], ["requested_domain__name"]),
|
|
||||||
]
|
|
||||||
|
|
||||||
# For readability purposes, but can be replaced with a one liner
|
|
||||||
def form_field_order_helper(self, form_field, db_field):
|
|
||||||
"""A shorthand for AdminFormOrderHelper(foreignkey_orderby_dict)
|
|
||||||
.get_ordered_form_field(form_field, db_field)"""
|
|
||||||
|
|
||||||
form = AdminFormOrderHelper(self.foreignkey_orderby_dict)
|
|
||||||
return form.get_ordered_form_field(form_field, db_field)
|
|
Loading…
Add table
Add a link
Reference in a new issue