summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_operations/views.py20
-rw-r--r--ishtar_common/templates/blocks/inline_formset.html9
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 %}