From 1bf6db0596cc0dfaf852b4ab7aa8ed5444f86330 Mon Sep 17 00:00:00 2001 From: Erin Mullaney <erin.mullaney@torchbox.com> Date: Thu, 7 Feb 2019 16:34:58 -0500 Subject: [PATCH] improve view form_valid, set role on widget --- opentech/apply/funds/forms.py | 3 ++- .../funds/includes/delegated_form_base.html | 4 ++-- opentech/apply/funds/views.py | 15 ++++----------- opentech/apply/funds/widgets.py | 2 +- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/opentech/apply/funds/forms.py b/opentech/apply/funds/forms.py index 9af42b55d..64e10f61b 100644 --- a/opentech/apply/funds/forms.py +++ b/opentech/apply/funds/forms.py @@ -84,7 +84,8 @@ class UpdateReviewersForm(forms.ModelForm): field_name = 'reviewer_' + str(role.pk) self.fields[field_name] = forms.ModelChoiceField( queryset=staff_reviewers, - widget=Select2IconWidget(attrs={'data-placeholder': 'Select a reviewer', 'icon': role.icon}), + widget=Select2IconWidget(attrs={ + 'data-placeholder': 'Select a reviewer', 'role': role}), required=False, label=f'{role.name} Reviewer', ) diff --git a/opentech/apply/funds/templates/funds/includes/delegated_form_base.html b/opentech/apply/funds/templates/funds/includes/delegated_form_base.html index 905e28b59..a5e618774 100644 --- a/opentech/apply/funds/templates/funds/includes/delegated_form_base.html +++ b/opentech/apply/funds/templates/funds/includes/delegated_form_base.html @@ -8,8 +8,8 @@ {{ field.errors }} {# TODO: Add styles around icon later #} - {% if field.field.widget.attrs.icon %} - {% image field.field.widget.attrs.icon max-20x20 %} + {% if field.field.widget.attrs.role and field.field.widget.attrs.role.icon %} + {% image field.field.widget.attrs.role.icon max-20x20 %} {% endif %} diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py index 727483682..b5c00f247 100644 --- a/opentech/apply/funds/views.py +++ b/opentech/apply/funds/views.py @@ -42,7 +42,6 @@ from .models import ( ApplicationSubmission, AssignedReviewers, ApplicationRevision, - ReviewerRole, RoundsAndLabs, RoundBase, LabBase @@ -289,18 +288,12 @@ class UpdateReviewersView(DelegatedViewMixin, UpdateView): # Save role reviewers ONLY, we saved others in UpdateReviewersForm.save() form.cleaned_data.pop('reviewer_reviewers') for key, user in form.cleaned_data.items(): - role_pk = key[key.rindex("_") + 1:] - role = ReviewerRole.objects.get(pk=role_pk) - # Create the reviewer/role association to submission if it doesn't exist - submission_reviewer, created = AssignedReviewers.objects.get_or_create( - submission=form.instance, reviewer=user, role=role) + role = form.fields[key].widget.attrs['role'] + # Create the reviewer/role association to submission if it doesn't exist, or update it + obj, created = AssignedReviewers.objects.update_or_create( + submission=form.instance, role=role, defaults={'reviewer': user}) if created: users_with_roles.append({ 'user': user, 'role': role}) - # Delete any reviewer/role associations that existed previously - AssignedReviewers.objects.filter( - Q(submission=form.instance), - ~Q(reviewer=user), - Q(role=role)).delete() new_reviewers_external = set(AssignedReviewers.objects.filter(submission=form.instance, role__isnull=True)) added_external = new_reviewers_external - old_reviewers_external diff --git a/opentech/apply/funds/widgets.py b/opentech/apply/funds/widgets.py index 95b81f6d8..ecb2e9ede 100644 --- a/opentech/apply/funds/widgets.py +++ b/opentech/apply/funds/widgets.py @@ -25,6 +25,6 @@ class Select2MultiCheckboxesWidget(Select2MultipleWidget): class Select2IconWidget(Select2Widget): def __init__(self, *args, **kwargs): attrs = kwargs.get('attrs', {}) - attrs.setdefault('icon', '') + attrs.setdefault('role', '') kwargs['attrs'] = attrs super().__init__(*args, **kwargs) -- GitLab