Skip to content

Commit 1d4224c

Browse files
committed
feat: Fix 500 error on notes field being too long
1 parent c4d0cf7 commit 1d4224c

6 files changed

Lines changed: 46 additions & 2 deletions

File tree

dome/templates/base.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
<link rel="manifest" href="{% url 'manifest' %}">
4141
<script src="{% static 'js/alpinejs-3.15.2.min.js' %}" defer></script>
4242
<script src="{% static 'js/htmx-2.0.7.min.js' %}" defer></script>
43+
<!-- https://htmx.org/quirks/#by-default-4xx-5xx-responses-do-not-swap -->
44+
<meta name="htmx-config" content='{"responseHandling": [{"code":".*", "swap": true}]}' /> <!-- All responses are swapped -->
4345
</head>
4446
<body class="bg-gray-50">
4547
<div class="max-w-5xl mx-auto">

entities/models.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
from django.core.validators import MaxLengthValidator
77
from django.db import models
8-
from django.db.models.functions import Lower
98
from django.urls import reverse
109
from django.utils.translation import gettext_lazy as _
1110

entities/templates/entities/entities_detail.html

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,23 @@ <h1 class="text-3xl font-bold mb-2">{{ object.name }}</h1>
108108
</p>
109109
{% endif %}
110110

111+
<!-- Tracking Form Errors -->
112+
{% if form.errors %}
113+
<div class="border-3 border-black bg-red-100 p-4 mb-4">
114+
<h3 class="font-bold text-xs uppercase mb-2">Could not save changes</h3>
115+
<ul class="list-disc list-inside text-xs text-red-700">
116+
{% for field in form %}
117+
{% for error in field.errors %}
118+
<li>{{ field.label }}: {{ error }}</li>
119+
{% endfor %}
120+
{% endfor %}
121+
{% for error in form.non_field_errors %}
122+
<li>{{ error }}</li>
123+
{% endfor %}
124+
</ul>
125+
</div>
126+
{% endif %}
127+
111128
<!-- Status and Rating Box -->
112129
<div x-data="{ statusDropdownOpen: false, ratingDropdownOpen: false, hoverIndex: null }"
113130
class="neo-box p-4 mb-6">
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 6.0.2 on 2026-03-17 17:13
2+
3+
import django.core.validators
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
dependencies = [
9+
("tracking", "0002_initial"),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name="trackingobject",
15+
name="notes",
16+
field=models.TextField(blank=True, validators=[django.core.validators.MaxLengthValidator(500)]),
17+
),
18+
]

tracking/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class Status(models.IntegerChoices):
2828
rating = models.PositiveSmallIntegerField(
2929
null=True, blank=True, validators=[MinValueValidator(1), MaxValueValidator(5)]
3030
)
31-
notes = models.TextField(blank=True, validators=[MaxLengthValidator(150)])
31+
notes = models.TextField(blank=True, validators=[MaxLengthValidator(500)])
3232

3333
class Meta:
3434
indexes: ClassVar = [

tracking/views.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,14 @@ def form_valid(self: Self, form: ModelForm) -> HttpResponse:
104104
self.request, "entities/entities_detail.html", {"object": self.entity, "tracking_obj": self.object}
105105
)
106106

107+
def form_invalid(self: Self, form: ModelForm) -> HttpResponse:
108+
return render(
109+
self.request,
110+
"entities/entities_detail.html",
111+
{"object": self.entity, "tracking_obj": self.object, "form": form},
112+
status=400,
113+
)
114+
107115
def get_context_data(self: Self, **kwargs: Any) -> dict[str, Any]:
108116
context = super().get_context_data(**kwargs)
109117
context["entity"] = self.entity

0 commit comments

Comments
 (0)