11import re
22
33from django import forms
4- from django .db .models import Q
4+ from django .db .models import Count
55
66from ietf .group .models import Group , GroupMilestone , Role
77from ietf .name .models import GroupStateName , GroupTypeName , RoleName
@@ -33,6 +33,13 @@ def get_person(name):
3333 return None
3434 return person
3535
36+ def get_parent_group_choices ():
37+ area_choices = [(g .id , g .name ) for g in Group .objects .filter (type = 'area' ,state = 'active' )]
38+ other_parents = Group .objects .annotate (children = Count ('group' )).filter (children__gt = 0 ).order_by ('name' ).exclude (type = 'area' )
39+ other_choices = [(g .id , g .name ) for g in other_parents ]
40+ choices = (('Working Group Areas' ,area_choices ),('Other' ,other_choices ))
41+ return choices
42+
3643# ---------------------------------------------
3744# Forms
3845# ---------------------------------------------
@@ -66,7 +73,7 @@ def save(self, force_insert=False, force_update=False, commit=True):
6673
6774class GroupModelForm (forms .ModelForm ):
6875 type = forms .ModelChoiceField (queryset = GroupTypeName .objects .all (),empty_label = None )
69- parent = forms .ModelChoiceField (queryset = Group .objects .filter ( Q ( type = 'area' , state = 'active' ) | Q ( acronym = 'irtf' ) ),required = False )
76+ parent = forms .ModelChoiceField (queryset = Group .objects .all ( ),required = False )
7077 ad = forms .ModelChoiceField (queryset = Person .objects .filter (role__name = 'ad' ,role__group__state = 'active' ,role__group__type = 'area' ),required = False )
7178 state = forms .ModelChoiceField (queryset = GroupStateName .objects .exclude (slug__in = ('dormant' ,'unknown' )),empty_label = None )
7279 liaison_contacts = forms .CharField (max_length = 255 ,required = False ,label = 'Default Liaison Contacts' )
@@ -82,8 +89,9 @@ def __init__(self, *args, **kwargs):
8289 self .fields ['list_archive' ].label = 'List Archive'
8390 self .fields ['ad' ].label = 'Area Director'
8491 self .fields ['comments' ].widget .attrs ['rows' ] = 3
85- self .fields ['parent' ].label = 'Area'
86-
92+ self .fields ['parent' ].label = 'Area / Parent'
93+ self .fields ['parent' ].choices = get_parent_group_choices ()
94+
8795 if self .instance .pk :
8896 lsgc = self .instance .liaisonstatementgroupcontacts_set .first () # there can only be one
8997 if lsgc :
0 commit comments