added form for DomainApplicationAdmin which limits the list of statuses to those which are available to transition to

This commit is contained in:
David Kennedy 2023-09-11 14:49:52 -04:00
parent 74ea2e0be7
commit a592b5ff71
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B

View file

@ -1,4 +1,6 @@
import logging
from django import forms
from django_fsm import get_available_FIELD_transitions
from django.contrib import admin, messages
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.contenttypes.models import ContentType
@ -224,6 +226,29 @@ class ContactAdmin(ListHeaderAdmin):
search_help_text = "Search by firstname, lastname or email."
class DomainApplicationAdminForm(forms.ModelForm):
"""Custom form to limit transitions to available transitions"""
class Meta:
model = models.DomainApplication
fields = '__all__'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
instance = kwargs.get('instance')
if instance and instance.pk:
current_state = instance.status
transitions = get_available_FIELD_transitions(
instance, models.DomainApplication._meta.get_field('status'))
# first option in status transitions is current state
available_transitions = [(current_state, current_state)]
for transition in transitions:
available_transitions.append((transition.target, transition.target))
self.fields['status'].widget.choices = available_transitions
class DomainApplicationAdmin(ListHeaderAdmin):
"""Customize the applications listing view."""
@ -255,6 +280,7 @@ class DomainApplicationAdmin(ListHeaderAdmin):
search_help_text = "Search by domain or submitter."
# Detail view
form = DomainApplicationAdminForm
fieldsets = [
(None, {"fields": ["status", "investigator", "creator"]}),
(