fix: resolve Pydantic date field shadowing causing 422 on event update

The field name 'date' in EventUpdate shadowed the 'date' type from
datetime, causing Pydantic v2 to interpret Optional[date] as
Optional[None] — rejecting all non-null values with a 422 error.

Fix: rename import to 'date as _date' and use '_date' in all
annotations. Also improve error handling in admin forms to properly
display 422 validation error messages.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-19 17:19:03 +00:00
co-authored by Claude
parent b0564ba727
commit bd65455945
4 changed files with 347 additions and 6 deletions
+21 -6
View File
@@ -1,11 +1,22 @@
from datetime import date
from datetime import date as _date
from typing import Optional
from pydantic import BaseModel, field_validator
from pydantic import BaseModel, computed_field, field_validator
# ── Program ──────────────────────────────────────────────
DAY_NAMES = {
1: "Monday",
2: "Tuesday",
3: "Wednesday",
4: "Thursday",
5: "Friday",
6: "Saturday",
7: "Sunday",
}
class ProgramCreate(BaseModel):
day_of_week: int
day_label: str
@@ -27,19 +38,23 @@ class ProgramUpdate(BaseModel):
class ProgramResponse(BaseModel):
id: int
day_of_week: int
day_label: str
time: str
title: str
host: str
genre: str
@computed_field
@property
def day_label(self) -> str:
return DAY_NAMES.get(self.day_of_week, "Unknown")
model_config = {"from_attributes": True}
# ── Event ────────────────────────────────────────────────
class EventCreate(BaseModel):
date: date
date: _date
title: str
description: str
location: str
@@ -48,7 +63,7 @@ class EventCreate(BaseModel):
class EventUpdate(BaseModel):
date: Optional[date] = None
date: Optional[_date] = None
title: Optional[str] = None
description: Optional[str] = None
location: Optional[str] = None
@@ -59,7 +74,7 @@ class EventUpdate(BaseModel):
class EventResponse(BaseModel):
id: int
date: date
date: _date
title: str
description: str
location: str