diff --git a/chrono/manager/forms.py b/chrono/manager/forms.py index 59a0c8d7..9211d2ed 100644 --- a/chrono/manager/forms.py +++ b/chrono/manager/forms.py @@ -26,7 +26,6 @@ import django_filters from dateutil.relativedelta import relativedelta from django import forms from django.conf import settings -from django.contrib.auth.models import Group from django.contrib.humanize.templatetags.humanize import ordinal from django.core.exceptions import FieldDoesNotExist from django.core.validators import URLValidator @@ -70,16 +69,13 @@ from chrono.utils.lingo import get_agenda_check_types from chrono.utils.timezone import localtime, make_aware, now from . import widgets +from .utils import get_role_queryset from .widgets import SplitDateTimeField, WeekdaysWidget class AgendaAddForm(forms.ModelForm): - edit_role = forms.ModelChoiceField( - label=_('Edit Role'), required=False, queryset=Group.objects.all().order_by('name') - ) - view_role = forms.ModelChoiceField( - label=_('View Role'), required=False, queryset=Group.objects.all().order_by('name') - ) + edit_role = forms.ModelChoiceField(label=_('Edit Role'), required=False, queryset=get_role_queryset()) + view_role = forms.ModelChoiceField(label=_('View Role'), required=False, queryset=get_role_queryset()) class Meta: model = Agenda @@ -155,12 +151,8 @@ class UnavailabilityCalendarAddForm(forms.ModelForm): model = UnavailabilityCalendar fields = ['label', 'edit_role', 'view_role'] - edit_role = forms.ModelChoiceField( - label=_('Edit Role'), required=False, queryset=Group.objects.all().order_by('name') - ) - view_role = forms.ModelChoiceField( - label=_('View Role'), required=False, queryset=Group.objects.all().order_by('name') - ) + edit_role = forms.ModelChoiceField(label=_('Edit Role'), required=False, queryset=get_role_queryset()) + view_role = forms.ModelChoiceField(label=_('View Role'), required=False, queryset=get_role_queryset()) class UnavailabilityCalendarEditForm(UnavailabilityCalendarAddForm): @@ -1639,7 +1631,7 @@ class SharedCustodyPeriodForm(forms.ModelForm): class SharedCustodySettingsForm(forms.ModelForm): management_role = forms.ModelChoiceField( - label=_('Management role'), required=False, queryset=Group.objects.all().order_by('name') + label=_('Management role'), required=False, queryset=get_role_queryset() ) class Meta: diff --git a/chrono/manager/utils.py b/chrono/manager/utils.py index 2c0c12c1..6ec1ba03 100644 --- a/chrono/manager/utils.py +++ b/chrono/manager/utils.py @@ -18,6 +18,7 @@ import collections import itertools from django.contrib.auth.models import Group +from django.core.exceptions import FieldDoesNotExist from django.db import transaction from django.db.models import Q @@ -124,3 +125,14 @@ def import_site(data, if_empty=False, clean=False, overwrite=False): results[key]['updated'].append(obj) SharedCustodySettings.import_json(data.get('shared_custody_settings', {})) return results + + +def get_role_queryset(): + qs = Group.objects.all().order_by('name') + + try: + Group._meta.get_field('role') + except FieldDoesNotExist: + return qs + + return qs.exclude(role__slug__startswith='_')