a friendly little helper (#4021)
* a friendly little helper * addressing comments * update comment --------- Co-authored-by: simon <simon@reflex.dev>
This commit is contained in:
parent
9c3cc0cfa6
commit
e96b4bf42e
@ -22,7 +22,7 @@ from reflex import constants
|
||||
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, sqlmodel_field_has_primary_key
|
||||
|
||||
|
||||
def get_engine(url: str | None = None) -> sqlalchemy.engine.Engine:
|
||||
@ -166,8 +166,7 @@ class Model(Base, sqlmodel.SQLModel): # pyright: ignore [reportGeneralTypeIssue
|
||||
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 sqlmodel_field_has_primary_key(field)
|
||||
]
|
||||
if non_default_primary_key_fields:
|
||||
cls.__fields__.pop("id", None)
|
||||
|
@ -69,3 +69,21 @@ def pydantic_v1_patch():
|
||||
|
||||
with pydantic_v1_patch():
|
||||
import sqlmodel as sqlmodel
|
||||
|
||||
|
||||
def sqlmodel_field_has_primary_key(field) -> bool:
|
||||
"""Determines if a field is a priamary.
|
||||
|
||||
Args:
|
||||
field: a rx.model field
|
||||
|
||||
Returns:
|
||||
If field is a primary key (Bool)
|
||||
"""
|
||||
if getattr(field.field_info, "primary_key", None) is True:
|
||||
return True
|
||||
if getattr(field.field_info, "sa_column", None) is None:
|
||||
return False
|
||||
if getattr(field.field_info.sa_column, "primary_key", None) is True:
|
||||
return True
|
||||
return False
|
||||
|
Loading…
Reference in New Issue
Block a user