diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-03-07 19:51:52 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:21:00 +0100 |
commit | ef1672ebd6487e0711f86c3d76b8f6fa5bc03cbb (patch) | |
tree | 6dc7a5f9047cac4d5772d8439bbaa323c1da8086 | |
parent | f1ae9d46287bdc6eeda3e7c2da6efcbacf422ef9 (diff) | |
download | Ishtar-ef1672ebd6487e0711f86c3d76b8f6fa5bc03cbb.tar.bz2 Ishtar-ef1672ebd6487e0711f86c3d76b8f6fa5bc03cbb.zip |
Operation - Parcels - Modify: display correctly parcel that cannot be deleted
-rw-r--r-- | archaeological_operations/views.py | 20 | ||||
-rw-r--r-- | ishtar_common/templates/blocks/inline_formset.html | 9 |
2 files changed, 23 insertions, 6 deletions
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 23419ba14..5ebee7b43 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -22,6 +22,7 @@ from jinja2 import TemplateSyntaxError from django.conf import settings from django.db.models import Q +from django.forms.utils import ErrorDict, ErrorList from django.http import HttpResponse, HttpResponseRedirect, Http404 from django.shortcuts import render, redirect from django.urls import reverse @@ -488,7 +489,8 @@ def operation_modify_parcels(request, pk): return redirect(reverse("operation-parcels-modify", args=[pk])) if formset.is_valid(): - for data in formset.cleaned_data: + is_valid = True + for idx_form, data in enumerate(formset.cleaned_data): if (not data.get('parcel_number') or not data.get('section')) and \ not data.get('public_domain'): continue @@ -498,16 +500,23 @@ def operation_modify_parcels(request, pk): try: current_parcel = models.Parcel.objects.get(pk=data.get("pk")) except models.Parcel.DoesNotExist: - pass + continue if current_parcel: not_deleted_or_associated = True for key, value in data.items(): if key == "DELETE" and value is True: - parcel_associated_by_context_record = ContextRecord.objects.filter(parcel=current_parcel.pk).all() + parcel_associated_by_context_record = \ + ContextRecord.objects.filter(parcel=current_parcel.pk).all() if parcel_associated_by_context_record.count() > 0: - raise ValidationError("This parcel is associated with a context record. It can't be deleted.") + is_valid = False + formset.forms[idx_form].errors["__all__"] = ErrorList([ + ValidationError( + _("This parcel is associated with a context " + "record. It can't be deleted.") + ) + ]) else: current_parcel.delete() not_deleted_or_associated = False @@ -528,7 +537,8 @@ def operation_modify_parcels(request, pk): public_domain = data.get("public_domain") ) operation.parcels.add(parcel_to_add) - return redirect(reverse("operation-parcels-modify", args=[pk])) + if is_valid: + return redirect(reverse("operation-parcels-modify", args=[pk])) else: formset = formset_class(initial=initial, data=data) diff --git a/ishtar_common/templates/blocks/inline_formset.html b/ishtar_common/templates/blocks/inline_formset.html index 37be0f005..f7e18ba2b 100644 --- a/ishtar_common/templates/blocks/inline_formset.html +++ b/ishtar_common/templates/blocks/inline_formset.html @@ -3,11 +3,18 @@ {% if header %}<table class='inline-table' id='{{formset.prefix}}'> <caption>{% trans caption %}</caption> <thead> - <tr>{% for field in formset.0.visible_fields%} + <tr>{% for field in formset.0.visible_fields %} <th>{{field.label}}</th>{%endfor%} </tr> </thead>{% endif %}{% for frm in formset%} {% if forloop.first and not skip %}<tbody>{%endif%} + {% if frm.non_field_errors %} + <tr class="errors"> + <td colspan="{{formset.0.visible_fields|length}}"> + {{frm.non_field_errors.as_ul}} + </td> + </tr> + {% endif %} {% if not skip or not forloop.first %} <tr>{% endif %}{% for field in frm.visible_fields %}<td> {% if field.errors %}<div class='errors'>{{ field.errors.as_ul }}</div>{% endif %} |