From 9ab9ff5da506a06bab3251aefee592bae3910ac8 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 19 Jan 2024 16:50:36 +0100 Subject: [PATCH] better use of forms in bulk actions --- rowers/forms.py | 6 ++++ rowers/templates/list_workouts.html | 5 +--- rowers/templates/workout_bulk_actions.html | 28 +++++++++--------- rowers/views/statements.py | 1 + rowers/views/workoutviews.py | 33 ++++++++++++++++------ 5 files changed, 47 insertions(+), 26 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index 3cafb247..812a8a8b 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -1265,6 +1265,12 @@ class ForceCurveMultipleCompareForm(forms.Form): widget=forms.CheckboxSelectMultiple() ) +bulkactions = ( + ('remove','remove'), +) +class WorkoutBulkActions(forms.Form): + action = forms.ChoiceField( + choices=bulkactions, label='Action', required=True, initial='remove') class WorkoutMultipleCompareForm(forms.Form): workouts = forms.ModelMultipleChoiceField( diff --git a/rowers/templates/list_workouts.html b/rowers/templates/list_workouts.html index 283c8755..beeafdad 100644 --- a/rowers/templates/list_workouts.html +++ b/rowers/templates/list_workouts.html @@ -97,10 +97,7 @@

Bulk Operation

Please select workouts from the list to do a bulk operation on.

- + {{ actionform.as_p }} {% csrf_token %} diff --git a/rowers/templates/workout_bulk_actions.html b/rowers/templates/workout_bulk_actions.html index 5fc56d17..8bd51d62 100644 --- a/rowers/templates/workout_bulk_actions.html +++ b/rowers/templates/workout_bulk_actions.html @@ -7,23 +7,23 @@ {% block main %}

Bulk Actions

    -
  • -

    - Edit and confirm the action you want to perform on the following workouts: -

    - {% for workout in workouts %} -

    {{ workout }}

    - {% endfor %} -

    - Action: {{ action }} -

    -
  • -
  • - +
  • + +

    + Edit and confirm the action you want to perform on the following workouts: +

    +

    + {{ form.as_p }} +

    +

    + {{ actionform.as_p }} +

    +
  • +
  • {% csrf_token %} +
  • -
diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 5c07b20e..d2690946 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -96,6 +96,7 @@ from django.http import ( ) from django.contrib.auth import authenticate, login, logout from rowers.forms import ( + WorkoutBulkActions, ForceCurveOptionsForm, HistoForm, TeamMessageForm, LoginForm, DocumentsForm, UploadOptionsForm, ImageForm, CourseForm, CourseConfirmForm, ResampleForm, diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 924d6ed0..dfa8f823 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -2040,7 +2040,6 @@ def workouts_bulk_actions(request): workouts = [] try: for encid in workoutids: - print(encid) w = get_workout_by_opaqueid(request, encid) if w.user == r: workouts.append(w) @@ -2048,15 +2047,30 @@ def workouts_bulk_actions(request): pass if request.method == 'POST': - if action == 'remove': - for w in workouts: - messages.info(request,'Removed workout '+str(encoder.encode_hex(w.id))) - w.delete() - url = reverse('workouts_view') - return HttpResponseRedirect(url) + actionform = WorkoutBulkActions(request.POST) + form = WorkoutMultipleCompareForm(request.POST) + if form.is_valid() and actionform.is_valid(): + workouts = form.cleaned_data['workouts'] + action = actionform.cleaned_data['action'] + if action == 'remove': + for w in workouts: + messages.info(request,'Removed workout '+str(encoder.encode_hex(w.id))) + w.delete() + url = reverse('workouts_view') + return HttpResponseRedirect(url) + + else: + actionform = WorkoutBulkActions() + actionform.fields["action"].initial = action + form = WorkoutMultipleCompareForm() + form.fields["workouts"].queryset = Workout.objects.filter(id__in=[w.id for w in workouts]) + form.fields["workouts"].initial = workouts + return render(request,'workout_bulk_actions.html', {'action':action, + 'actionform':actionform, + 'form':form, 'workouts':workouts}) # List Workouts @@ -2078,7 +2092,7 @@ def workouts_view(request, message='', successmessage='', if request.method == 'POST': if 'selectworkouts' in request.POST: - request.session['action']=request.POST['selectworkouts_operation'] + request.session['action']=request.POST['action'] request.session['ids'] = request.POST.getlist('workoutid') url = reverse('workouts_bulk_actions') return HttpResponseRedirect(url) @@ -2261,10 +2275,13 @@ def workouts_view(request, message='', successmessage='', Click here to update them. \ You can switch off this warning in settings.') + actionform = WorkoutBulkActions() + return render(request, 'list_workouts.html', {'workouts': workouts, 'active': 'nav-workouts', 'rower': r, + 'actionform': actionform, 'searchform': searchform, 'breadcrumbs': breadcrumbs, 'dateform': dateform,