From 6f55a91dedb95c630dd8678dff5ed2de70844c51 Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 27 Sep 2024 19:10:05 -0700 Subject: [PATCH] a friendly little helper --- reflex/model.py | 6 +++--- reflex/utils/compat.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/reflex/model.py b/reflex/model.py index fefb1f9e9e..3abb4c3cd8 100644 --- a/reflex/model.py +++ b/reflex/model.py @@ -22,7 +22,7 @@ from reflex.base import Base from reflex.config import get_config from reflex.utils import console -from reflex.utils.compat import sqlmodel +from reflex.utils.compat import sqlmodel, sa_column_id_supporter def get_engine(url: str | None = None) -> sqlalchemy.engine.Engine: @@ -166,10 +166,10 @@ def __init_subclass__(cls): non_default_primary_key_fields = [ field_name for field_name, field in cls.__fields__.items() - if field_name != "id" - and getattr(field.field_info, "primary_key", None) is True + if field_name != "id" and sa_column_id_supporter(field) ] if non_default_primary_key_fields: + print(cls.__name__, non_default_primary_key_fields) cls.__fields__.pop("id", None) super().__init_subclass__() diff --git a/reflex/utils/compat.py b/reflex/utils/compat.py index ef5fcd3e14..3d99ffd079 100644 --- a/reflex/utils/compat.py +++ b/reflex/utils/compat.py @@ -69,3 +69,18 @@ def pydantic_v1_patch(): with pydantic_v1_patch(): import sqlmodel as sqlmodel + + +def sa_column_id_supporter(field) -> bool: + """Adds support for sa_column so we don't add id with a primary key + is defined + + AKA simons_litttle_helper + AKA masens_litttlerrr_helperr + """ + if getattr(field.field_info, "primary_key", None) is True: + return True + if getattr(field.field_info, "sa_column", None) is not None: + if getattr(field.field_info.sa_column, "primary_key", None) is True: + return True + return False