diff --git a/freeadmin/contrib/adapters/tortoise/adapter.py b/freeadmin/contrib/adapters/tortoise/adapter.py index 791bb6f..7f323cd 100644 --- a/freeadmin/contrib/adapters/tortoise/adapter.py +++ b/freeadmin/contrib/adapters/tortoise/adapter.py @@ -509,6 +509,8 @@ async def m2m_clear(self, manager) -> None: This coroutine must be awaited. """ + if manager is None: + return await manager.clear() async def m2m_add(self, manager, objs: Iterable[Model]) -> None: @@ -520,6 +522,8 @@ async def m2m_add(self, manager, objs: Iterable[Model]) -> None: This coroutine must be awaited. """ + if manager is None: + return await manager.add(*objs) def values(self, qs: QuerySet, *fields: str) -> QuerySet: diff --git a/freeadmin/core/interface/base.py b/freeadmin/core/interface/base.py index ab3dbfe..65d5282 100644 --- a/freeadmin/core/interface/base.py +++ b/freeadmin/core/interface/base.py @@ -1238,9 +1238,17 @@ def clean( return data, m2m_ops async def m2m_clear(self, manager): + """Safely clear all links from the provided relation manager.""" + + if manager is None: + return await self.adapter.m2m_clear(manager) async def m2m_add(self, manager, objs: Iterable[Any]): + """Attach ``objs`` to the provided relation manager when available.""" + + if manager is None: + return await self.adapter.m2m_add(manager, objs) async def create(