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