pythonpydantic

How to require predefined string values in python pydantic basemodels?


Is there any in-built way in pydantic to specify options? For example, let's say I want a string value that must either have the value "foo" or "bar".

I know I can use regex validation to do this, but since I use pydantic with FastAPI, the users will only see the required input as a string, but when they enter something, it will give a validation error. All in-built validations of pydantic are displayed in the api interface, so would be great if there was something like

class Input(BaseModel):
     option: "foo" || "bar"

Solution

  • Yes, you can either use an enum:

    class Choices(Enum):
        foo = 'foo'
        bar = 'bar'
    
    class Input(BaseModel):
         option: Choices
    

    see here

    Or you can use Literal:

    from typing import Literal
    
    class Input(BaseModel):
         option: Literal['foo', 'bar']
    

    see here