mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-25 03:58:39 +02:00
AdminSortFields refactor
This commit is contained in:
parent
f55d5ef934
commit
63438f0193
1 changed files with 34 additions and 37 deletions
|
@ -13,9 +13,12 @@ from django.contrib.contenttypes.models import ContentType
|
||||||
from django.http.response import HttpResponseRedirect
|
from django.http.response import HttpResponseRedirect
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from epplibwrapper.errors import ErrorCode, RegistryError
|
from epplibwrapper.errors import ErrorCode, RegistryError
|
||||||
|
from registrar.models.contact import Contact
|
||||||
from registrar.models.domain import Domain
|
from registrar.models.domain import Domain
|
||||||
from registrar.models.domain_application import DomainApplication
|
from registrar.models.domain_application import DomainApplication
|
||||||
|
from registrar.models.draft_domain import DraftDomain
|
||||||
from registrar.models.user import User
|
from registrar.models.user import User
|
||||||
|
from registrar.models.website import Website
|
||||||
from registrar.utility import csv_export
|
from registrar.utility import csv_export
|
||||||
from registrar.views.utility.mixins import OrderableFieldsMixin
|
from registrar.views.utility.mixins import OrderableFieldsMixin
|
||||||
from django.contrib.admin.views.main import ORDER_VAR
|
from django.contrib.admin.views.main import ORDER_VAR
|
||||||
|
@ -123,41 +126,39 @@ class CustomLogEntryAdmin(LogEntryAdmin):
|
||||||
|
|
||||||
|
|
||||||
class AdminSortFields:
|
class AdminSortFields:
|
||||||
def get_queryset(db_field):
|
_name_sort = Concat("first_name", "last_name", "email")
|
||||||
|
# Define a mapping of field names to model querysets and sort expressions
|
||||||
|
sort_mapping = {
|
||||||
|
"other_contacts": (Contact, _name_sort),
|
||||||
|
"authorizing_official": (Contact, _name_sort),
|
||||||
|
"submitter": (Contact, _name_sort),
|
||||||
|
"current_websites": (Website, "website"),
|
||||||
|
"alternative_domains": (Website, "website"),
|
||||||
|
"creator": (User, _name_sort),
|
||||||
|
"user": (User, _name_sort),
|
||||||
|
"investigator": (User, _name_sort),
|
||||||
|
"domain": (Domain, "name"),
|
||||||
|
"approved_domain": (Domain, "name"),
|
||||||
|
"requested_domain": (DraftDomain, "name"),
|
||||||
|
"domain_application": (DomainApplication, "requested_domain__name"),
|
||||||
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_queryset(cls, 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"""
|
||||||
# customize sorting
|
queryset_info = cls.sort_mapping.get(db_field.name, None)
|
||||||
if db_field.name in (
|
if queryset_info is None:
|
||||||
"other_contacts",
|
|
||||||
"authorizing_official",
|
|
||||||
"submitter",
|
|
||||||
):
|
|
||||||
# Sort contacts by first_name, then last_name, then email
|
|
||||||
return models.Contact.objects.all().order_by(Concat("first_name", "last_name", "email"))
|
|
||||||
elif db_field.name in ("current_websites", "alternative_domains"):
|
|
||||||
# sort web sites
|
|
||||||
return models.Website.objects.all().order_by("website")
|
|
||||||
elif db_field.name in (
|
|
||||||
"creator",
|
|
||||||
"user",
|
|
||||||
"investigator",
|
|
||||||
):
|
|
||||||
# Sort users by first_name, then last_name, then email
|
|
||||||
return models.User.objects.all().order_by(Concat("first_name", "last_name", "email"))
|
|
||||||
elif db_field.name in (
|
|
||||||
"domain",
|
|
||||||
"approved_domain",
|
|
||||||
):
|
|
||||||
# Sort domains by name
|
|
||||||
return models.Domain.objects.all().order_by("name")
|
|
||||||
elif db_field.name in ("requested_domain",):
|
|
||||||
# Sort draft domains by name
|
|
||||||
return models.DraftDomain.objects.all().order_by("name")
|
|
||||||
elif db_field.name in ("domain_application",):
|
|
||||||
# Sort domain applications by name
|
|
||||||
return models.DomainApplication.objects.all().order_by("requested_domain__name")
|
|
||||||
else:
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
model, order_by = queryset_info
|
||||||
|
match db_field.name:
|
||||||
|
case "investigator":
|
||||||
|
# We should only return users who are staff
|
||||||
|
return model.objects.filter(is_staff=True).order_by(order_by)
|
||||||
|
case _:
|
||||||
|
# If no case is defined, return the default
|
||||||
|
return model.objects.order_by(order_by)
|
||||||
|
|
||||||
|
|
||||||
class AuditedAdmin(admin.ModelAdmin):
|
class AuditedAdmin(admin.ModelAdmin):
|
||||||
"""Custom admin to make auditing easier."""
|
"""Custom admin to make auditing easier."""
|
||||||
|
@ -922,12 +923,8 @@ class DomainApplicationAdmin(ListHeaderAdmin):
|
||||||
return super().formfield_for_manytomany(db_field, request, **kwargs)
|
return super().formfield_for_manytomany(db_field, request, **kwargs)
|
||||||
|
|
||||||
def formfield_for_foreignkey(self, db_field, request, **kwargs):
|
def formfield_for_foreignkey(self, db_field, request, **kwargs):
|
||||||
logger.info(f"timing formfield_for_foreignkey -> {db_field.name}")
|
|
||||||
with Timer() as t:
|
with Timer() as t:
|
||||||
# Removes invalid investigator options from the investigator dropdown
|
print(f"This is the db_field: {db_field}")
|
||||||
if db_field.name == "investigator":
|
|
||||||
kwargs["queryset"] = User.objects.filter(is_staff=True)
|
|
||||||
return db_field.formfield(**kwargs)
|
|
||||||
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
return super().formfield_for_foreignkey(db_field, request, **kwargs)
|
||||||
|
|
||||||
# Trigger action when a fieldset is changed
|
# Trigger action when a fieldset is changed
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue