diff options
| -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 %} | 
