Validation

This commit is contained in:
Eden Kirin
2024-05-16 07:55:27 +02:00
parent 2fc2d07a7d
commit fc6b3a7fa0
3 changed files with 31 additions and 9 deletions

View File

@ -1,14 +1,24 @@
{% macro inline_table_row(person, is_editing) %} {% macro inline_table_row(person, is_editing, errors={}) %}
{% macro render_input(field_name, value) %}
{% set has_error = field_name in errors %}
<input
class="form-control {% if has_error %}is-invalid{% endif %}"
name="{{ field_name }}"
value="{{ value }}"
{% if has_error %}title="{{ errors[field_name] }}"{% endif %}
>
{% endmacro %}
{% if is_editing %} {% if is_editing %}
<tr id="person-row-{{ person.pk }}" hx-target="this" hx-swap="outerHTML"> <tr id="person-row-{{ person.pk }}" hx-target="this" hx-swap="outerHTML">
<td> <td>
<input class="form-control" name="name" value="{{ person.name }}"> {{ render_input(field_name="name", value=person.name) }}
</td> </td>
<td> <td>
<input class="form-control" name="address" value="{{ person.address }}"> {{ render_input(field_name="address", value=person.address) }}
</td> </td>
<td> <td>
<input class="form-control" name="city" value="{{ person.city }}"> {{ render_input(field_name="city", value=person.city) }}
</td> </td>
<td> <td>
<button <button

View File

@ -1,3 +1,3 @@
{% from "main/components/inline_table_row.html" import inline_table_row %} {% from "main/components/inline_table_row.html" import inline_table_row %}
{{ inline_table_row(person, is_editing=is_editing) }} {{ inline_table_row(person, is_editing=is_editing, errors=errors) }}

View File

@ -1,7 +1,8 @@
from typing import Any from typing import Any, Optional
from django.core.exceptions import ValidationError
from django.core.handlers.wsgi import WSGIRequest from django.core.handlers.wsgi import WSGIRequest
from django.http import Http404, HttpRequest, HttpResponse from django.http import Http404, HttpResponse
from django.shortcuts import render from django.shortcuts import render
from project.main.models import Person from project.main.models import Person
@ -51,16 +52,27 @@ class TableInlineEditRowView(DemoViewBase):
return context_data return context_data
def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponse: def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponse:
errors: Optional[dict[str, str]] = None
person = get_person(pk=kwargs.get("pk")) person = get_person(pk=kwargs.get("pk"))
person.name = request.POST.get("name") person.name = request.POST.get("name")
person.address = request.POST.get("address") person.address = request.POST.get("address")
person.city = request.POST.get("city") person.city = request.POST.get("city")
try:
person.clean_fields()
except ValidationError as ex:
errors = {key: value[0].message for key, value in ex.error_dict.items()}
else:
person.save() person.save()
print(errors)
return render( return render(
context={ context={
"person": person, "person": person,
"is_editing": False, "errors": errors,
"is_editing": errors is not None,
}, },
template_name=self.template_name, template_name=self.template_name,
request=request, request=request,