def copy_workout(request, pk): """ Makes a copy of a workout """ workout = get_object_or_404(Workout, pk=pk) user = workout.user is_owner = request.user == user if not is_owner and not user.userprofile.ro_access: return HttpResponseForbidden() # Process request if request.method == 'POST': workout_form = WorkoutCopyForm(request.POST) if workout_form.is_valid(): # Copy workout days_original = workout.day_set.all() workout_copy = copy.copy(workout) workout_copy.pk = None workout_copy.name = workout_form.cleaned_data['name'] workout_copy.user = request.user workout_copy.save() # Copy the days for day in days_original: sets = day.set_set.all() days_of_week = [i for i in day.day.all()] day_copy = copy.copy(day) day_copy.pk = None day_copy.training = workout_copy day_copy.save() for i in days_of_week: day_copy.day.add(i) day_copy.save() # Copy the sets for current_set in sets: current_set_copy = copy.copy(current_set) current_set_copy.pk = None current_set_copy.exerciseday = day_copy current_set_copy.save() # Copy the settings for current_setting in current_set.setting_set.all(): setting_copy = copy.copy(current_setting) setting_copy.pk = None setting_copy.set = current_set_copy setting_copy.save() return HttpResponseRedirect(reverse('manager:workout:view', kwargs={'pk': workout_copy.id})) else: workout_form = WorkoutCopyForm({'name': workout.name, 'description': workout.description}) workout_form.helper = FormHelper() workout_form.helper.form_id = slugify(request.path) workout_form.helper.form_method = 'post' workout_form.helper.form_action = request.path workout_form.helper.add_input( Submit('submit', _('Save'), css_class='btn-success btn-block')) workout_form.helper.form_class = 'wger-form' template_data = {} template_data.update(csrf(request)) template_data['title'] = _('Copy workout') template_data['form'] = workout_form template_data['form_fields'] = [workout_form['name']] template_data['submit_text'] = _('Copy') return render(request, 'form.html', template_data)
def copy_workout(request, pk): """ Makes a copy of a workout """ workout = get_object_or_404(Workout.both, pk=pk) if not workout.is_public and request.user != workout.user: return HttpResponseForbidden() # Process request if request.method == 'POST': workout_form = WorkoutCopyForm(request.POST) if workout_form.is_valid(): # Copy workout workout_copy: Workout = copy.copy(workout) workout_copy.pk = None workout_copy.name = workout_form.cleaned_data['name'] workout_copy.user = request.user workout_copy.is_template = False workout_copy.is_public = False workout_copy.save() # Copy the days for day in workout.day_set.all(): day_copy = copy.copy(day) day_copy.pk = None day_copy.training = workout_copy day_copy.save() for i in day.day.all(): day_copy.day.add(i) day_copy.save() # Copy the sets for current_set in day.set_set.all(): current_set_copy = copy.copy(current_set) current_set_copy.pk = None current_set_copy.exerciseday = day_copy current_set_copy.save() # Copy the settings for current_setting in current_set.setting_set.all(): setting_copy = copy.copy(current_setting) setting_copy.pk = None setting_copy.set = current_set_copy setting_copy.save() return HttpResponseRedirect(workout_copy.get_absolute_url()) else: workout_form = WorkoutCopyForm({ 'name': workout.name, 'description': workout.description }) workout_form.helper = FormHelper() workout_form.helper.form_id = slugify(request.path) workout_form.helper.form_method = 'post' workout_form.helper.form_action = request.path workout_form.helper.add_input( Submit('submit', _('Save'), css_class='btn-success btn-block')) workout_form.helper.form_class = 'wger-form' template_data = {} template_data.update(csrf(request)) template_data['title'] = _('Copy workout') template_data['form'] = workout_form template_data['form_fields'] = [workout_form['name']] template_data['submit_text'] = _('Copy') return render(request, 'form.html', template_data)