def delete(self, request, *args, **kwargs): # Workaround for https://code.djangoproject.com/ticket/21926 # Replicates the `delete` method of DeleteMixin self.object = self.get_object() success_url = self.get_success_url() try: self.object.delete() messages.success(self.request, self.success_message.format(self.object)) return HttpResponseRedirect(success_url) except ProtectedError as e: return failed_to_delete(self.request, self.object, e.protected_objects)
def delete(self, request, *args, **kwargs): # Workaround for https://code.djangoproject.com/ticket/21926 # Replicates the `delete` method of DeleteMixin self.object = self.get_object() success_url = self.get_success_url() try: self.object.delete() messages.success( self.request, self.success_message.format(self.object) ) return HttpResponseRedirect(success_url) except ProtectedError as e: return failed_to_delete(self.request, self.object, e.protected_objects)
def trainingrequests_merge(request): """Display two training requests side by side on GET and merge them on POST. If no requests are supplied via GET params, display event selection form.""" obj_a_pk = request.GET.get('trainingrequest_a') obj_b_pk = request.GET.get('trainingrequest_b') if not obj_a_pk or not obj_b_pk: context = { 'title': 'Select Training Requests to merge', 'form': TrainingRequestsSelectionForm(), } return render(request, 'generic_form.html', context) obj_a = get_object_or_404(TrainingRequest, pk=obj_a_pk) obj_b = get_object_or_404(TrainingRequest, pk=obj_b_pk) form = TrainingRequestsMergeForm( initial=dict(trainingrequest_a=obj_a, trainingrequest_b=obj_b)) if request.method == "POST": form = TrainingRequestsMergeForm(request.POST) if form.is_valid(): # merging in process data = form.cleaned_data obj_a = data['trainingrequest_a'] obj_b = data['trainingrequest_b'] # `base_obj` stays in the database after merge # `merging_obj` will be removed from DB after merge if data['id'] == 'obj_a': base_obj = obj_a merging_obj = obj_b base_a = True else: base_obj = obj_b merging_obj = obj_a base_a = False # non-M2M-relationships: easy = ( 'state', 'person', 'group_name', 'personal', 'middle', 'family', 'email', 'github', 'occupation', 'occupation_other', 'affiliation', 'location', 'country', 'underresourced', 'domains_other', 'underrepresented', 'underrepresented_details', 'nonprofit_teaching_experience', 'previous_training', 'previous_training_other', 'previous_training_explanation', 'previous_experience', 'previous_experience_other', 'previous_experience_explanation', 'programming_language_usage_frequency', 'teaching_frequency_expectation', 'teaching_frequency_expectation_other', 'max_travelling_frequency', 'max_travelling_frequency_other', 'reason', 'user_notes', 'training_completion_agreement', 'workshop_teaching_agreement', 'data_privacy_agreement', 'code_of_conduct_agreement', 'created_at', 'last_updated_at', ) # M2M relationships difficult = ( 'domains', 'previous_involvement', ) try: _, integrity_errors = merge_objects(obj_a, obj_b, easy, difficult, choices=data, base_a=base_a) if integrity_errors: msg = ('There were integrity errors when merging related ' 'objects:\n' '\n'.join(integrity_errors)) messages.warning(request, msg) except ProtectedError as e: return failed_to_delete(request, object=merging_obj, protected_objects=e.protected_objects) else: return redirect(base_obj.get_absolute_url()) else: messages.error(request, 'Fix errors in the form.') context = { 'title': 'Merge two training requets', 'obj_a': obj_a, 'obj_b': obj_b, 'form': form, } return render(request, 'requests/trainingrequests_merge.html', context)
def trainingrequests_merge(request): """Display two training requests side by side on GET and merge them on POST. If no requests are supplied via GET params, display event selection form.""" obj_a_pk = request.GET.get("trainingrequest_a") obj_b_pk = request.GET.get("trainingrequest_b") if not obj_a_pk or not obj_b_pk: context = { "title": "Select Training Requests to merge", "form": TrainingRequestsSelectionForm(), } return render(request, "generic_form.html", context) obj_a = get_object_or_404(TrainingRequest, pk=obj_a_pk) obj_b = get_object_or_404(TrainingRequest, pk=obj_b_pk) form = TrainingRequestsMergeForm( initial=dict(trainingrequest_a=obj_a, trainingrequest_b=obj_b)) if request.method == "POST": form = TrainingRequestsMergeForm(request.POST) if form.is_valid(): # merging in process data = form.cleaned_data obj_a = data["trainingrequest_a"] obj_b = data["trainingrequest_b"] # `base_obj` stays in the database after merge # `merging_obj` will be removed from DB after merge if data["id"] == "obj_a": base_obj = obj_a merging_obj = obj_b base_a = True else: base_obj = obj_b merging_obj = obj_a base_a = False # non-M2M-relationships: easy = ( "state", "person", "group_name", "personal", "middle", "family", "email", "secondary_email", "github", "occupation", "occupation_other", "affiliation", "location", "country", "underresourced", "domains_other", "underrepresented", "underrepresented_details", "nonprofit_teaching_experience", "previous_training", "previous_training_other", "previous_training_explanation", "previous_experience", "previous_experience_other", "previous_experience_explanation", "programming_language_usage_frequency", "teaching_frequency_expectation", "teaching_frequency_expectation_other", "max_travelling_frequency", "max_travelling_frequency_other", "reason", "user_notes", "training_completion_agreement", "workshop_teaching_agreement", "data_privacy_agreement", "code_of_conduct_agreement", "created_at", "last_updated_at", ) # M2M relationships difficult = ( "domains", "previous_involvement", ) try: _, integrity_errors = merge_objects(obj_a, obj_b, easy, difficult, choices=data, base_a=base_a) if integrity_errors: msg = ("There were integrity errors when merging related " "objects:\n" "\n".join(integrity_errors)) messages.warning(request, msg) except ProtectedError as e: return failed_to_delete(request, object=merging_obj, protected_objects=e.protected_objects) else: return redirect(base_obj.get_absolute_url()) else: messages.error(request, "Fix errors in the form.") context = { "title": "Merge two training requets", "obj_a": obj_a, "obj_b": obj_b, "form": form, } return render(request, "requests/trainingrequests_merge.html", context)
def trainingrequests_merge(request): """Display two training requests side by side on GET and merge them on POST. If no requests are supplied via GET params, display event selection form.""" obj_a_pk = request.GET.get('trainingrequest_a') obj_b_pk = request.GET.get('trainingrequest_b') if not obj_a_pk or not obj_b_pk: context = { 'title': 'Select Training Requests to merge', 'form': TrainingRequestsSelectionForm(), } return render(request, 'generic_form.html', context) obj_a = get_object_or_404(TrainingRequest, pk=obj_a_pk) obj_b = get_object_or_404(TrainingRequest, pk=obj_b_pk) form = TrainingRequestsMergeForm(initial=dict(trainingrequest_a=obj_a, trainingrequest_b=obj_b)) if request.method == "POST": form = TrainingRequestsMergeForm(request.POST) if form.is_valid(): # merging in process data = form.cleaned_data obj_a = data['trainingrequest_a'] obj_b = data['trainingrequest_b'] # `base_obj` stays in the database after merge # `merging_obj` will be removed from DB after merge if data['id'] == 'obj_a': base_obj = obj_a merging_obj = obj_b base_a = True else: base_obj = obj_b merging_obj = obj_a base_a = False # non-M2M-relationships: easy = ( 'state', 'person', 'group_name', 'personal', 'middle', 'family', 'email', 'github', 'occupation', 'occupation_other', 'affiliation', 'location', 'country', 'underresourced', 'domains_other', 'underrepresented', 'underrepresented_details', 'nonprofit_teaching_experience', 'previous_training', 'previous_training_other', 'previous_training_explanation', 'previous_experience', 'previous_experience_other', 'previous_experience_explanation', 'programming_language_usage_frequency', 'teaching_frequency_expectation', 'teaching_frequency_expectation_other', 'max_travelling_frequency', 'max_travelling_frequency_other', 'reason', 'user_notes', 'training_completion_agreement', 'workshop_teaching_agreement', 'data_privacy_agreement', 'code_of_conduct_agreement', 'created_at', 'last_updated_at', ) # M2M relationships difficult = ( 'domains', 'previous_involvement', ) try: _, integrity_errors = merge_objects(obj_a, obj_b, easy, difficult, choices=data, base_a=base_a) if integrity_errors: msg = ('There were integrity errors when merging related ' 'objects:\n' '\n'.join(integrity_errors)) messages.warning(request, msg) except ProtectedError as e: return failed_to_delete(request, object=merging_obj, protected_objects=e.protected_objects) else: return redirect(base_obj.get_absolute_url()) else: messages.error(request, 'Fix errors in the form.') context = { 'title': 'Merge two training requets', 'obj_a': obj_a, 'obj_b': obj_b, 'form': form, } return render(request, 'requests/trainingrequests_merge.html', context)