diff --git a/src/registrar/admin.py b/src/registrar/admin.py index d8fc4a232..7e1c59609 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -264,21 +264,25 @@ class DomainApplicationAdminForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - instance = kwargs.get("instance") - if instance and instance.pk: - current_state = instance.status + application = kwargs.get("instance") + if application and application.pk: + current_state = application.status # first option in status transitions is current state available_transitions = [(current_state, current_state)] transitions = get_available_FIELD_transitions( - instance, models.DomainApplication._meta.get_field("status") + application, models.DomainApplication._meta.get_field("status") ) for transition in transitions: available_transitions.append((transition.target, transition.target)) - self.fields["status"].widget.choices = available_transitions + # only set the available transitions if the user is not restricted + # from editing the domain application; otherwise, the form will be + # readonly and the status field will not have a widget + if not application.creator.is_restricted(): + self.fields["status"].widget.choices = available_transitions class DomainApplicationAdmin(ListHeaderAdmin): diff --git a/src/registrar/tests/test_admin.py b/src/registrar/tests/test_admin.py index 78d358034..f4e5ec862 100644 --- a/src/registrar/tests/test_admin.py +++ b/src/registrar/tests/test_admin.py @@ -120,6 +120,20 @@ class TestDomainApplicationAdminForm(TestCase): DomainApplication._meta.get_field("status").choices, ) + def test_form_choices_when_ineligible(self): + # Create a form instance with a domain application with ineligible status + ineligible_application = DomainApplication(status="ineligible") + + # Attempt to create a form with the ineligible application + # The form should not raise an error, but choices should be the + # full list of possible choices + form = DomainApplicationAdminForm(instance=ineligible_application) + + self.assertEqual( + form.fields["status"].widget.choices, + DomainApplication._meta.get_field("status").choices, + ) + class TestDomainApplicationAdmin(TestCase): def setUp(self):