How to manage relationships in (pydantic) models
EDIT: add proper greetings 🙄
Hi guys,
Many thanks for this fantastic repo. It rocks. Not to mention https://dockerswarm.rocks/, I am now in the process to review all my projects from this base 🥇
Here is my question :
How can I declare a one-to-many relationship in the pydantic models?
Context
I have a first object 'Rule', that is attached to a second 'City'.
I have tried the following without success :
rules.py
from app.models.cities import City
class RuleBase(BaseModel):
mode: Optional[RuleMode] = None
value: Optional[float] = None
city: Optional[City] = None
cities.py
class City(BaseModel):
id: int
name: str
rules: Optional[List['Rule']]
Error in tests:
ImportError while loading conftest '/app/app/tests/conftest.py'.
app/app/tests/conftest.py:4: in <module>
from app.models.cities import City, Rectangle, Point
app/app/models/cities.py:50: in <module>
class City(BaseModel):
usr/local/lib/python3.6/site-packages/pydantic/main.py:179: in __new__
config=config,
usr/local/lib/python3.6/site-packages/pydantic/fields.py:118: in infer
schema=schema,
usr/local/lib/python3.6/site-packages/pydantic/fields.py:87: in __init__
self.prepare()
usr/local/lib/python3.6/site-packages/pydantic/fields.py:152: in prepare
self._populate_sub_fields()
usr/local/lib/python3.6/site-packages/pydantic/fields.py:177: in _populate_sub_fields
self.sub_fields = [self._create_sub_type(t, f'{self.name}_{display_as_type(t)}') for t in types_]
usr/local/lib/python3.6/site-packages/pydantic/fields.py:177: in <listcomp>
self.sub_fields = [self._create_sub_type(t, f'{self.name}_{display_as_type(t)}') for t in types_]
usr/local/lib/python3.6/site-packages/pydantic/fields.py:210: in _create_sub_type
model_config=self.model_config,
usr/local/lib/python3.6/site-packages/pydantic/fields.py:87: in __init__
self.prepare()
usr/local/lib/python3.6/site-packages/pydantic/fields.py:153: in prepare
self._populate_validators()
usr/local/lib/python3.6/site-packages/pydantic/fields.py:228: in _populate_validators
else find_validators(self.type_, self.model_config.arbitrary_types_allowed)
usr/local/lib/python3.6/site-packages/pydantic/validators.py:326: in find_validators
raise RuntimeError(f'error checking inheritance of {type_!r} (type: {display_as_type(type_)})') from e
E RuntimeError: error checking inheritance of _ForwardRef('Rule') (type: _ForwardRef('Rule'))
Cheers,
Emmanuel