diff --git a/src/registrar/admin.py b/src/registrar/admin.py index ac4a5c07f..33765b178 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -2473,7 +2473,10 @@ class DomainAdmin(ListHeaderAdmin, ImportExportModelAdmin): generic_org_type.admin_order_field = "domain_info__generic_org_type" # type: ignore def federal_agency(self, obj): - return obj.domain_info.federal_agency if obj.domain_info else None + if obj.domain_info: + return obj.domain_info.federal_agency + else: + return None federal_agency.admin_order_field = "domain_info__federal_agency" # type: ignore diff --git a/src/registrar/forms/domain.py b/src/registrar/forms/domain.py index 5a239af2f..b43d91a58 100644 --- a/src/registrar/forms/domain.py +++ b/src/registrar/forms/domain.py @@ -4,7 +4,7 @@ import logging from django import forms from django.core.validators import MinValueValidator, MaxValueValidator, RegexValidator, MaxLengthValidator from django.forms import formset_factory -from registrar.models import DomainRequest +from registrar.models import DomainRequest, FederalAgency from phonenumber_field.widgets import RegionalPhoneNumberWidget from registrar.models.suborganization import Suborganization from registrar.models.utility.domain_helper import DomainHelper @@ -535,17 +535,25 @@ class DomainOrgNameAddressForm(forms.ModelForm): def save(self, commit=True): """Override the save() method of the BaseModelForm.""" + if self.has_changed(): # This action should be blocked by the UI, as the text fields are readonly. # If they get past this point, we forbid it this way. # This could be malicious, so lets reserve information for the backend only. - if self.is_federal and not self._field_unchanged("federal_agency"): - raise ValueError("federal_agency cannot be modified when the generic_org_type is federal") + + if self.is_federal: + if not self._field_unchanged("federal_agency"): + raise ValueError("federal_agency cannot be modified when the generic_org_type is federal") + elif self.is_tribal and not self._field_unchanged("organization_name"): raise ValueError("organization_name cannot be modified when the generic_org_type is tribal") - super().save() + else: # If this error that means Non-Federal Agency is missing + non_federal_agency_instance = FederalAgency.get_non_federal_agency() + self.instance.federal_agency = non_federal_agency_instance + + return super().save(commit=commit) def _field_unchanged(self, field_name) -> bool: """