Optional and nullable fields let you accept data that might be missing or empty. This helps your app handle flexible inputs without errors.
When a user can skip filling a form field.
When an API accepts data that may or may not include certain details.
When you want to allow a field to be empty or set to null explicitly.
When you want to provide default values if data is missing.
When you want to validate data that can be either a value or None.
Syntax
FastAPI
from typing import Optional
from pydantic import BaseModel
class MyModel(BaseModel):
optional_field: Optional[str] = None# Field can be missing or None
nullable_field: str | None = None# Field can be present but can be None
Optional means the field can be missing or set to None.
Nullable means the field can be present but set to None.
Examples
This model allows nickname to be missing or None.
FastAPI
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
name: str
nickname: Optional[str] = None# User may or may not provide a nickname
This uses Python 3.10+ syntax for nullable field.
FastAPI
from pydantic import BaseModel
class Product(BaseModel):
description: str | None = None# Description can be null or a string
Without a default, the field is required but can be None.
FastAPI
from typing import Optional
from pydantic import BaseModel
class Item(BaseModel):
price: Optional[float] # Price is required but can be None, no default given
Sample Program
This FastAPI app defines a User model with optional and nullable fields. When you send a POST request to /users/ with JSON data, it returns the username and shows default messages if bio or website are missing or null.
FastAPI
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
username: str
bio: Optional[str] = None# Optional field
website: str | None = None# Nullable field
@app.post('/users/')
asyncdef create_user(user: User):
return {
'username': user.username,
'bio': user.bio or'No bio provided',
'website': user.website or'No website provided'
}
OutputSuccess
Important Notes
Use Optional when a field can be missing or None.
Use str | None (Python 3.10+) to allow null values explicitly.
Setting a default to None makes the field optional in FastAPI.
Summary
Optional fields can be missing or None.
Nullable fields can be present but set to None.
Use these to make your API flexible and user-friendly.
Practice
(1/5)
1. In FastAPI, what does it mean when a field is declared as Optional[str] in a request model?
easy
A. The field is required and cannot be None.
B. The field must always be provided with a string value.
C. The field can only be an empty string but not None.
D. The field can be omitted or set to None in the request.
Solution
Step 1: Understand Optional type in FastAPI
Optional[str] means the field can be missing or have a value of type str or None.
Step 2: Interpret the meaning for API requests
This allows clients to omit the field or explicitly send null (None) as its value.
Final Answer:
The field can be omitted or set to None in the request. -> Option D
Quick Check:
Optional[str] = omitted or None [OK]
Hint: Optional means field can be missing or None [OK]
Common Mistakes:
Thinking Optional means field is always required
Confusing Optional with default values
Assuming Optional forbids None
2. Which of the following is the correct way to declare a nullable string field in a FastAPI Pydantic model?
easy
A. name: Optional[str] = None
B. name: str | None = None
C. name: str = None
D. name: str?
Solution
Step 1: Recall Pydantic syntax for optional and nullable fields
To allow a field to be nullable and optional, use Optional[str] with a default None.
Step 2: Check each option
A is invalid because just assigning None to str without Optional is not correct. B is valid Python 3.10+ syntax but C is the recommended explicit way in FastAPI. D is invalid syntax.
Final Answer:
name: Optional[str] = None -> Option A
Quick Check:
Nullable string = Optional[str] = None [OK]
Hint: Use Optional[type] with = None for nullable fields [OK]
Common Mistakes:
Using just type with = None without Optional
Using invalid syntax like str?
Confusing Optional with just default values
3. Given this FastAPI model:
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
name: str
nickname: Optional[str] = None
user = User(name='Alice')
What will be the value of user.nickname?
medium
A. '' (empty string)
B. 'Alice'
C. None
D. Raises an error
Solution
Step 1: Analyze the model fields and defaults
The nickname field is Optional[str] with a default of None, so if not provided, it defaults to None.
Step 2: Check the instance creation
When creating user with only name='Alice', nickname is not set, so it uses the default None.
Final Answer:
None -> Option C
Quick Check:
Optional field missing = None [OK]
Hint: Missing optional field defaults to None [OK]
Common Mistakes:
Assuming nickname defaults to empty string
Thinking nickname copies name value
Expecting an error for missing optional field
4. What is wrong with this FastAPI model declaration?
from typing import Optional
from pydantic import BaseModel
class Item(BaseModel):
description: Optional[str]
medium
A. Optional[str] is not allowed in Pydantic models.
B. Missing default value for Optional field causes validation error.
C. Field description must be declared as str, not Optional[str].
D. No import for Optional is present.
Solution
Step 1: Understand Optional fields in Pydantic
Optional means the field can be None or missing, but Pydantic requires a default value for optional fields.
Step 2: Check the model declaration
The field description is Optional[str] but has no default value, so Pydantic will expect it to be provided and raise an error if missing.
Final Answer:
Missing default value for Optional field causes validation error. -> Option B
Quick Check:
Optional fields need default values [OK]
Hint: Optional fields must have default values [OK]
Common Mistakes:
Omitting default None for Optional fields
Thinking Optional alone makes field optional
Ignoring Pydantic validation rules
5. You want to create a FastAPI model where the field email can be omitted, but if present, it can be set to null explicitly. Which is the best way to declare this field?
hard
A. email: Optional[str] = None
B. email: str = None
C. email: str | None
D. email: Optional[str]
Solution
Step 1: Understand requirements for the field
The field must be optional (can be omitted) and nullable (can be None explicitly).
Step 2: Evaluate each declaration
B lacks Optional and default None, so it is not optional. C lacks default None, so field is required. D lacks default None, so field is required. A uses Optional[str] with default None, making it optional and nullable.
Final Answer:
email: Optional[str] = None -> Option A
Quick Check:
Optional with default None = optional and nullable [OK]
Hint: Use Optional[type] with = None for optional nullable fields [OK]
Common Mistakes:
Forgetting to assign default None
Using union without default value
Assuming Optional alone makes field optional
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.