Comments (5)
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
from sqlmodel.
I really find interesting the idea of creating a schema that inherits all fields from a SQLModel
but make all of them Optional. Did you ever find a solution to this, @cisaacstern or @nickleman?
from sqlmodel.
You can make optional fields required in child classes, but you cannot make required fields optional.
Perhaps this is not possible with class
, however I think it is possible with type()
?
In #166 I link to a proposed method, make_updater_cls
, that does this.
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 SQLModel
) is created using the user-defined base model as reference. So the more general point about Python inheritance (child classes can't "optionalize" fields) is not disproved, but perhaps the practical application (how to generate an updater model from a base model) may still be possible.
from sqlmodel.
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] = None
Above code should generate 2 classes, first one with name Hero
and the second one, like this:
class HeroPartial(SQLModel):
id: int
name: Optional[str]
secret_name: Optional[str]
from sqlmodel.
@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.
from sqlmodel.
Related Issues (20)
- There is no unique constraint matching given keys (one-to-many, connecting with many-to-many tables) HOT 2
- Preparing for Pydantic v2 release HOT 13
- Data Integrity: Raise error on attempt to delete an object required via a Relationship HOT 8
- [Querying] negating `Model.boolean` in `where()` HOT 2
- [M2M] Query dependent incl. `link_model` fields HOT 3
- Could not refresh instance HOT 9
- SQLModel doesn't recognize Relationship between models HOT 1
- Get select with options (selectinload) using response schema HOT 2
- Dose there any better way to write timezone aware datetime field without using the SQLAlchemy ? HOT 3
- Obtaining `TypeError: Cannot pickle 'module' object` on models with many-to-many relationships HOT 2
- Order of columns in the table created does not have 'id' first, despite the order in the SQLModel. Looks like it's prioritising fields with sa_column HOT 3
- Erro ao executar uvicorn.run(...) HOT 1
- Many to many relationship between a table and itself HOT 6
- How to add current date time by default on a table declaration? HOT 13
- Add documentation about how to use the async tools (session, etc) HOT 5
- async relationship bug HOT 9
- 🚀 Roadmap HOT 28
- Internal link failed at create-db-and-table.md
- Field cannot autocompletion when its a SQLModel HOT 6
- Add an overload to the `exec` method with `_Executable` statement for update and delete statements
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sqlmodel.