fix: Only show ADs when assigning ADs for groups (#4440)

* fix: Only show ADs when assigning ADs for groups

Fixes #4302

* Fix test failure
This commit is contained in:
Lars Eggert 2022-09-13 15:54:12 +01:00 committed by GitHub
parent 5fcf2aa44a
commit 79bf320acc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 2 deletions

View file

@ -13,6 +13,7 @@ from django import forms
from django.utils.html import mark_safe # type:ignore
from django.db.models import F
from django.core.exceptions import ValidationError, ObjectDoesNotExist
from django.db.models import Q
# IETF imports
from ietf.group.models import Group, GroupHistory, GroupStateName, GroupFeatures
@ -118,6 +119,10 @@ class GroupForm(forms.Form):
if fieldname == 'delegate_roles':
field_args['max_entries'] = MAX_GROUP_DELEGATES
field_args['help_text'] = mark_safe("Chairs can delegate the authority to update the state of group documents - at most %s persons at a given time." % MAX_GROUP_DELEGATES)
if role_slug == "ad":
field_args['extra_prefetch'] = Email.objects.filter(Q(role__name__in=('pre-ad', 'ad'), role__group__type='area', role__group__state='active')).distinct()
field_args['disable_ajax'] = True # only use the prefetched options
field_args['min_search_length'] = 0 # do not require typing to display options
self.fields[fieldname] = SearchableEmailsField(**field_args)
self.fields[fieldname].initial = Email.objects.filter(person__role__name_id=role_slug,person__role__group=self.group,person__role__email__pk=F('pk')).distinct()
@ -391,4 +396,4 @@ class ReviewSecretarySettingsForm(forms.ModelForm):
class Meta:
model = ReviewSecretarySettings
fields = ['remind_days_before_deadline', 'max_items_to_show_in_reviewer_list',
'days_to_show_in_reviewer_list']
'days_to_show_in_reviewer_list']

View file

@ -284,7 +284,7 @@ class SearchableField(forms.MultipleChoiceField):
for d in pre:
if isinstance(value, list):
d["selected"] = any([v.pk == d["id"] for v in value])
else:
elif value:
d["selected"] = value.exists() and value.filter(pk__in=[d["id"]]).exists()
self.widget.attrs["data-pre"] = json.dumps(list(pre))