101591 Views
79842 Views
45596 Views
44332 Views
40991 Views
33419 Views
Raspberry Pi Time machine
Now Ad-Free
Guiding Light
Sync Files on your Pis, with Syncthing
NextCloud
Buddy Jr.
Introduction to FreeCAD for Beginners
Building a Robot Arm with Raspberry Pi and PCA9685
Building User Authentication for Static Sites with FastAPI
Mastering Pydantic for Robust Data Validation
Mastering Markdown for Documentation with Jekyll
Introduction to Rust
KevsRobots Learning Platform
48% Percent Complete
By Kevin McAleer, 2 Minutes
Recursive models allow for the definition of complex, nested data structures within Pydantic. These are particularly useful for representing hierarchical data, such as organizational charts, file systems, or any nested relationships.
To define a recursive model in Pydantic, a model may reference itself within its fields. Pydantic supports this natively, but it requires forward declaration for self-referencing models, using a string to indicate the model’s name before it’s fully defined.
from typing import List, Optional from pydantic import BaseModel class TreeNode(BaseModel): name: str children: Optional[List['TreeNode']] = None
In this example, TreeNode is a model representing a node in a tree. Each node can have multiple children, which are also instances of TreeNode, demonstrating the recursive nature of the model.
TreeNode
Recursive models are instantiated and used in the same way as any other Pydantic model. However, when working with deeply nested data, consider the complexity and potential performance implications.
tree = TreeNode( name="root", children=[ TreeNode(name="child1"), TreeNode(name="child2", children=[TreeNode(name="grandchild1")]), ], ) print(tree)
This code creates a simple tree structure with a root node, two child nodes, and one grandchild node, showcasing the recursive model in action.
Pydantic’s parse_obj method can be used to handle circular references or deeply nested structures by providing a dictionary representation of the data. This method ensures that instances are correctly created without exceeding Python’s recursion limit.
parse_obj
Define a recursive model Category for representing a category tree where each category can have multiple subcategories. Each Category should have fields for id, name, and subcategories (optional, a list of Category).
Category
id
name
subcategories
Create an instance of your Category model representing a simple category structure with at least one subcategory and test its instantiation and serialization capabilities.
< Previous Next >