-
First Check
Commit to Help
Example Codeclass HeroBase(SQLModel):
name: str
secret_name: str
age: Optional[int] = None
class HeroUpdate(HeroBase, all_optional=True):
passDescriptionIs it possible to add the ability to modify the fields of a base class to convert them to all optional with a parameter like the table=True but in this case all_optional=True? This would help eliminate the duplication when creating a class for making updates. Wanted SolutionSet all base fields to Optional based on keyword argument. Wanted Codeclass HeroBase(SQLModel):
name: str
secret_name: str
age: Optional[int] = None
class HeroUpdate(HeroBase, all_optional=True):
passAlternativesNo response Operating SystemLinux, Windows Operating System DetailsNo response SQLModel Version0.0.4 Python Version3.8.5 Additional ContextNo response |
Beta Was this translation helpful? Give feedback.
Replies: 6 comments
-
|
This is pydantic-related. You can make optional fields required in child classes, but you cannot make required fields optional. Maybe the following resources will help you:
You can use a pattern like this instead: class HeroBase(SQLModel):
# optional, aka nullable
name: Optional[str]
secret_name: Optional[str]
age: Optional[int]
class HeroCreate(HeroBase):
# all required
name: str
secret_name: str
age: int
class HeroUpdate(HeroBase):
pass |
Beta Was this translation helpful? Give feedback.
-
Perhaps this is not possible with In #166 I link to a proposed method, I am new to Pydantic + SQLModel so certainly welcome any feedback on this approach. Edit: Upon closer consideration, I realize that my proposed method does not allow for making required fields optional on a class which inherits from the user-defined base model. Rather, a new class (which inherits directly from |
Beta Was this translation helpful? Give feedback.
-
|
I really find interesting the idea of creating a schema that inherits all fields from a |
Beta Was this translation helpful? Give feedback.
-
|
Also - it would be cool to have better control of which field should be optional and which not. I was thinking about some kind of "decorator" mechanism to generate desired new class similar to this: @Partial
class Hero(SQLModel):
id: int
@option
name: str
@option
secret_name: str
@remove
age: Optional[int] = NoneAbove code should generate 2 classes, first one with name class HeroPartial(SQLModel):
id: int
name: Optional[str]
secret_name: Optional[str] |
Beta Was this translation helpful? Give feedback.
-
|
@FilipeMarch apologies, I somehow missed your ping initially, and now a huge amount of time has passed. I have not thought about this issue in a while, but yes, the solution for a make_updater_cls method, proposed in my comment above, did work for me at the time. |
Beta Was this translation helpful? Give feedback.
-
|
Sadly this is not really possible in Python with the current type standards. It would require new features at the Python typing level. |
Beta Was this translation helpful? Give feedback.
Sadly this is not really possible in Python with the current type standards. It would require new features at the Python typing level.