Giter Club home page Giter Club logo

Comments (5)

visini avatar visini commented on May 17, 2024 2

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.

FilipeMarch avatar FilipeMarch commented on May 17, 2024 2

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.

cisaacstern avatar cisaacstern commented on May 17, 2024

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.

glimanowka-dyvenia avatar glimanowka-dyvenia commented on May 17, 2024

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.

cisaacstern avatar cisaacstern commented on May 17, 2024

@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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.