| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
class Item(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
value: float
hero_id: int = Field(foreign_key="hero.id")
hero: "Hero" = Relationship(back_populates="items")
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
items: List[Item] = Relationship(back_populates="hero")
@declared_attr
def total_items(cls):
return column_property(cls._total_items_expression())
@classmethod
def _total_items_expression(cls):
return (
select(func.coalesce(func.sum(Item.value), 0))
.where(Item.hero_id == cls.id)
.correlate_except(Item)
.label("total_items")
)
@declared_attr
def status(cls):
return column_property(
select(
case(
(cls._total_items_expression() > 0, "active"), else_="inactive"
)
).scalar_subquery()
) |
Sorry, something went wrong.
There was a problem hiding this comment.
Just small suggestions from a random outsider :p (some suggestions might be wrong).
All in all, this is clean and adds a lot of functionality, thanks !
You should look into this @tiangolo !
Sorry, something went wrong.
Co-authored-by: Arthur Woimbée <arthur.woimbee@gmail.com>
Co-authored-by: Arthur Woimbée <arthur.woimbee@gmail.com>
Co-authored-by: Arthur Woimbée <arthur.woimbee@gmail.com>
|
Please merge it asap :3. I need it, lol. |
Sorry, something went wrong.
|
hey can we get this merged in |
Sorry, something went wrong.
|
@tiangolo Could you please take a look at this MR. The functionality is very nice. Would be a nice addition. Doesn't seem to clash with overall design |
Sorry, something went wrong.
Following this example I am getting pydantic.errors.PydanticUserError: A non-annotated attribute was detected: `total_items = <sqlalchemy.orm.decl_api.declared_attr object at 0x10e415350>`. All model fields require a type annotation; if `total_items` is not meant to be a field, you may be able to resolve this error by annotating it as a `ClassVar` or updating `model_config['ignored_types']`. Even if I do def total_items(cls): -> int I still get the same error. But I think we can get the same result with computed_field and the property decorator from pydantic import computed_field
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
items: List[Item] = Relationship(back_populates="hero")
@computed_field
@property
def total_items(cls) -> int:
return len(self.items)
|
Sorry, something went wrong.
|
Any movement to get this functionality in? |
Sorry, something went wrong.
…enhance association proxy handling
…perties and enhance setter handling
…s for fallback behavior
…fallback values in deferred properties; add comprehensive tests for async scenarios and edge cases
…d tests to verify fallback behavior after refresh and loading
…y; add basic tests for fallback behavior and undefer functionality
… typing tests for compatibility
|
any updates on this? |
Sorry, something went wrong.
|
This pull request has a merge conflict that needs to be resolved. |
Sorry, something went wrong.
|
I think I can go a bit further than what this pr had in mind. I was thinking about combining computed_feilds and hybrid_property column_property and declared_attr together. Does anyone have any tips and suggestions? I'll try and use what this pr had in mind as a blueprint. |
Sorry, something went wrong.
…configuration and utility functions for SQLModel
|
@50Bytes-dev Glad to see your pr is still alive, mind if I help you review it? |
Sorry, something went wrong.
…columns by schema; update col function to return InstrumentedAttribute for better type safety
… relations in SQLModel
…Path and AliasChoices for enhanced flexibility
|
@50Bytes-dev Have you tried adding some tests to the pytest to ensure that this implementation works? |
Sorry, something went wrong.
Yes, I have basic tests. I use this PR in the production of my projects and make sure that everything works correctly. |
Sorry, something went wrong.
|
@50Bytes-dev thanks, for that piece of code. Is there any chance for release some time soon. I have a use case starting from next week and I'd like to omit a vanilla sqlalchemy workaround :) |
Sorry, something went wrong.
Release where? Personally, I just use the repository and don't plan to release anything anywhere. I recommend trying it this way too, it's quite convenient. dependencies = [
"sqlmodel",
]
[tool.uv.sources]
sqlmodel = { git = "https://github.com/50Bytes-dev/sqlmodel.git", rev = "833b8700e5006177d1a57fd8b3109bd625a358de" } |
Sorry, something went wrong.
|
@50Bytes-dev Okay, sorry. I thought that the PR is meant to be merged at some point. |
Sorry, something went wrong.
I think that the main repository is dead and unlikely to be developed further, so I created my own fork where I implement all the necessary functions myself. |
Sorry, something went wrong.
…eAttribute for better type safety
The main repo of what? FastAPI, SQLmodel? If there is no PR, in SQLModel I assume, nobody can check it, thus it appears obv. dead. Though if you look at the commit history in main, all is fine Looking for a method to introduce calculated column easily. Got to this to just read that lol |
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.