Git Product home page Git Product logo

Comments (3)

l1b3r avatar l1b3r commented on June 15, 2024

While I'm not sure this is a bug in django-ninja per se (since the generated schema seems correct and that's what matters in the first place), I have found an ugly workaround to bring the dropdowns back thanks to Pydantic's json_schema_extra. Leaving it here for anyone facing the same issue:

class MySchema(Schema):
    my_enum: MyEnum
    # my_opt_enum: MyEnum | None = None
    my_opt_enum: MyEnum | None = Field(None, json_schema_extra={"enum": [e.value for e in MyEnum]}) 
                                                                  πŸ‘†

This forcefully adds the "enum" spec right into the OpenAPI schema for my_opt_enum:

{"in": "query", "name": "my_opt_enum", "schema": {"anyOf": [{"$ref": "#/components/schemas/MyEnum"}, {"type": "null"}], "enum": ["foo", "bar", "baz"]}, "required": false}

And brings back the dropdown:
image

This workaround scales poorly and is ugly, so I would be glad to learn other solutions to this problem.

from django-ninja.

demiurg avatar demiurg commented on June 15, 2024

Is there a way to extend and overwrite schema generator classes to add extra json schema data?

from django-ninja.

doei avatar doei commented on June 15, 2024

When generating api clients, a $ref is preferable in every single case, because the extracted types will rely on the schema components, and the enum should be referred to as the same type whether it is in the querystring, or somewhere else, otherwise the type extractions will create a new type just for this querystring param...

The swagger UI should not be the reference point for this...

The bug here is that sometimes, the schema does not use a $ref for enums, not the other way around...

This is correctly done in FastAPI.

from django-ninja.

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.