diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 2812130a0..e46bc89fc 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -8,6 +8,7 @@ from django.db.models.functions import Concat, Coalesce from django.http import HttpResponseRedirect from registrar.models.federal_agency import FederalAgency from registrar.utility.admin_helpers import ( + AutocompleteSelectWithPlaceholder, get_action_needed_reason_default_email, get_rejection_reason_default_email, get_field_links_as_list, @@ -236,7 +237,17 @@ class DomainRequestAdminForm(forms.ModelForm): widgets = { "current_websites": NoAutocompleteFilteredSelectMultiple("current_websites", False), "alternative_domains": NoAutocompleteFilteredSelectMultiple("alternative_domains", False), - "other_contacts": NoAutocompleteFilteredSelectMultiple("other_contacts", False) + "other_contacts": NoAutocompleteFilteredSelectMultiple("other_contacts", False), + 'portfolio': AutocompleteSelectWithPlaceholder( + DomainRequest._meta.get_field('portfolio'), + admin.site, + attrs={'data-placeholder': '---------'} + ), + 'sub_organization': AutocompleteSelectWithPlaceholder( + DomainRequest._meta.get_field('sub_organization'), + admin.site, + attrs={'data-placeholder': '---------'} + ), } labels = { "action_needed_reason_email": "Email", diff --git a/src/registrar/utility/admin_helpers.py b/src/registrar/utility/admin_helpers.py index 37e0a0e00..6780ff011 100644 --- a/src/registrar/utility/admin_helpers.py +++ b/src/registrar/utility/admin_helpers.py @@ -4,6 +4,7 @@ from django.utils.html import format_html from django.urls import reverse from django.utils.html import escape from registrar.models.utility.generic_helper import value_of_attribute +from django.contrib.admin.widgets import AutocompleteSelect def get_action_needed_reason_default_email(domain_request, action_needed_reason): @@ -94,3 +95,12 @@ def get_field_links_as_list( else: links = "".join(links) return format_html(f'') if links else msg_for_none + +class AutocompleteSelectWithPlaceholder(AutocompleteSelect): + """Override of the default autoselect element. This is because by default, + the autocomplete element clears data-placeholder""" + def build_attrs(self, base_attrs, extra_attrs=None): + attrs = super().build_attrs(base_attrs, extra_attrs=extra_attrs) + if 'data-placeholder' in base_attrs: + attrs['data-placeholder'] = base_attrs['data-placeholder'] + return attrs \ No newline at end of file diff --git a/src/registrar/views/utility/api_views.py b/src/registrar/views/utility/api_views.py index f806a05fe..aa8bfb30c 100644 --- a/src/registrar/views/utility/api_views.py +++ b/src/registrar/views/utility/api_views.py @@ -60,6 +60,8 @@ def get_portfolio_json(request): # Convert the portfolio to a dictionary portfolio_dict = model_to_dict(portfolio) + portfolio_dict["id"] = portfolio.id + # map portfolio federal type portfolio_dict["federal_type"] = BranchChoices.get_branch_label(portfolio.federal_type) if portfolio.federal_type else "-" @@ -84,9 +86,9 @@ def get_portfolio_json(request): if portfolio.federal_agency: federal_agency = model_to_dict( portfolio.federal_agency, - fields=["agency"] + fields=["agency", "id"] ) - portfolio_dict["federal_agency"] = federal_agency["agency"] + portfolio_dict["federal_agency"] = federal_agency else: portfolio_dict["federal_agency"] = '-'