Skip to content

Commit

Permalink
Only pass Model.__fields__ when casting event args (#4356)
Browse files Browse the repository at this point in the history
Attempting to initialize relationship fields in a sqlmodel model throws an
error, so only pass defined pydantic __fields__ if the type is a Model.
  • Loading branch information
masenf authored Nov 12, 2024
1 parent 35c8afd commit 686548c
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions reflex/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
from reflex.config import get_config
from reflex.istate.data import RouterData
from reflex.istate.storage import ClientStorageBase
from reflex.model import Model
from reflex.vars.base import (
ComputedVar,
DynamicRouteVar,
Expand Down Expand Up @@ -1733,15 +1734,20 @@ async def _process_event(
if value is None:
continue
hinted_args = value_inside_optional(hinted_args)
if (
isinstance(value, dict)
and inspect.isclass(hinted_args)
and (
dataclasses.is_dataclass(hinted_args)
or issubclass(hinted_args, Base)
)
):
payload[arg] = hinted_args(**value)
if isinstance(value, dict) and inspect.isclass(hinted_args):
if issubclass(hinted_args, Model):
# Remove non-fields from the payload
payload[arg] = hinted_args(
**{
key: value
for key, value in value.items()
if key in hinted_args.__fields__
}
)
elif dataclasses.is_dataclass(hinted_args) or issubclass(
hinted_args, Base
):
payload[arg] = hinted_args(**value)
if isinstance(value, list) and (hinted_args is set or hinted_args is Set):
payload[arg] = set(value)
if isinstance(value, list) and (
Expand Down

0 comments on commit 686548c

Please sign in to comment.