Skip to content

Commit

Permalink
better integrity error (duplicate data) handling
Browse files Browse the repository at this point in the history
  • Loading branch information
digitalfox committed Feb 25, 2024
1 parent d853639 commit 1940db0
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 6 deletions.
12 changes: 8 additions & 4 deletions staffing/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,12 @@ def mission_staffing(request, mission_id):
return HttpResponseRedirect(reverse("core:forbidden"))
formset = StaffingFormSet(request.POST, instance=mission)
if formset.is_valid():
saveFormsetAndLog(formset, request)
formset = StaffingFormSet(instance=mission) # Recreate a new form for next update
try:
saveFormsetAndLog(formset, request)
formset = StaffingFormSet(instance=mission) # Recreate a new form for next update
except IntegrityError as e:
# Corner case with temporary constraint violation as database does not support deferred constraints
formset.management_form.add_error("", _("Duplicate data error"))
else:
formset = StaffingFormSet(instance=mission) # An unbound form

Expand Down Expand Up @@ -238,8 +242,8 @@ def consultant_staffing(request, consultant_id):
saveFormsetAndLog(formset, request)
formset = StaffingFormSet(instance=consultant) # Recreate a new form for next update
except IntegrityError as e:
# Corner case when user update one line that clash with constraint on another line that is removed on the same time
formset.management_form.add_error("", e)
# Corner case with temporary constraint violation as database does not support deferred constraints
formset.management_form.add_error("", _("Duplicate data error"))
else:
formset = StaffingFormSet(instance=consultant) # An unbound form

Expand Down
2 changes: 1 addition & 1 deletion templates/staffing/consultant_staffing.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<div id="pydici-ajax-form-content-consultant-staffing" class="py-2">
<form action="{% url 'staffing:consultant_staffing' consultant.id %}" method="POST" id="pydici-ajax-form-consultant-staffing">
{{ formset.management_form }}
<div class="text-danger">{{ formset.management_form }}</div>
<div class="form-row">
<table class="table table-striped table-hover table-sm">
<tr>
Expand Down
2 changes: 1 addition & 1 deletion templates/staffing/mission_staffing.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</div>

<form action="{% url 'staffing:mission_staffing' mission.id %}" method="POST" id="pydici-ajax-form-mission-staffing">
{{ formset.management_form }}
<div class="text-danger">{{ formset.management_form }}</div>
<div class="form-row">
<table class="table table-striped table-hover table-sm">
<tr>
Expand Down

0 comments on commit 1940db0

Please sign in to comment.