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 import logging
from django import forms
from django_fsm import get_available_FIELD_transitions
from django.contrib import admin, messages from django.contrib import admin, messages
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
@ -224,6 +226,29 @@ class ContactAdmin(ListHeaderAdmin):
search_help_text = "Search by firstname, lastname or email." 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): class DomainApplicationAdmin(ListHeaderAdmin):
"""Customize the applications listing view.""" """Customize the applications listing view."""
@ -255,6 +280,7 @@ class DomainApplicationAdmin(ListHeaderAdmin):
search_help_text = "Search by domain or submitter." search_help_text = "Search by domain or submitter."
# Detail view # Detail view
form = DomainApplicationAdminForm
fieldsets = [ fieldsets = [
(None, {"fields": ["status", "investigator", "creator"]}), (None, {"fields": ["status", "investigator", "creator"]}),
( (