bump version, update docs
This commit is contained in:
@ -88,7 +88,7 @@ class QuerysetProxy(ormar.QuerySetProtocol):
|
||||
async def count(self) -> int:
|
||||
return await self.queryset.count()
|
||||
|
||||
async def clear(self) -> int:
|
||||
async def clear(self, keep_reversed: bool = True) -> int:
|
||||
if self.type_ == ormar.RelationType.MULTIPLE:
|
||||
queryset = ormar.QuerySet(model_cls=self.relation.through)
|
||||
owner_column = self._owner.get_name()
|
||||
@ -97,10 +97,16 @@ class QuerysetProxy(ormar.QuerySetProtocol):
|
||||
owner_column = self.related_field.name
|
||||
kwargs = {owner_column: self._owner}
|
||||
self._clean_items_on_load()
|
||||
if keep_reversed and self.type_ == ormar.RelationType.REVERSE:
|
||||
update_kwrgs = {f"{owner_column}": None}
|
||||
return await queryset.filter(_exclude=False, **kwargs).update(
|
||||
each=False, **update_kwrgs
|
||||
)
|
||||
return await queryset.delete(**kwargs) # type: ignore
|
||||
|
||||
async def first(self, **kwargs: Any) -> "Model":
|
||||
first = await self.queryset.first(**kwargs)
|
||||
self._clean_items_on_load()
|
||||
self._register_related(first)
|
||||
return first
|
||||
|
||||
|
||||
@ -38,17 +38,20 @@ class RelationProxy(list):
|
||||
and self.queryset_proxy.queryset is not None
|
||||
)
|
||||
|
||||
def _set_queryset(self) -> "QuerySet":
|
||||
related_field = self._owner.resolve_relation_field(
|
||||
self.relation.to, self._owner
|
||||
)
|
||||
pkname = self._owner.get_column_alias(self._owner.Meta.pkname)
|
||||
def _check_if_model_saved(self) -> None:
|
||||
pk_value = self._owner.pk
|
||||
if not pk_value:
|
||||
raise RelationshipInstanceError(
|
||||
"You cannot query relationships from unsaved model."
|
||||
)
|
||||
kwargs = {f"{related_field.get_alias()}__{pkname}": pk_value}
|
||||
|
||||
def _set_queryset(self) -> "QuerySet":
|
||||
related_field = self._owner.resolve_relation_field(
|
||||
self.relation.to, self._owner
|
||||
)
|
||||
pkname = self._owner.get_column_alias(self._owner.Meta.pkname)
|
||||
self._check_if_model_saved()
|
||||
kwargs = {f"{related_field.get_alias()}__{pkname}": self._owner.pk}
|
||||
queryset = (
|
||||
ormar.QuerySet(model_cls=self.relation.to)
|
||||
.select_related(related_field.name)
|
||||
@ -56,7 +59,9 @@ class RelationProxy(list):
|
||||
)
|
||||
return queryset
|
||||
|
||||
async def remove(self, item: "Model") -> None: # type: ignore
|
||||
async def remove( # type: ignore
|
||||
self, item: "Model", keep_reversed: bool = True
|
||||
) -> None:
|
||||
if item not in self:
|
||||
raise NoMatch(
|
||||
f"Object {self._owner.get_name()} has no "
|
||||
@ -74,8 +79,11 @@ class RelationProxy(list):
|
||||
if self.type_ == ormar.RelationType.MULTIPLE:
|
||||
await self.queryset_proxy.delete_through_instance(item)
|
||||
else:
|
||||
setattr(item, rel_name, None)
|
||||
await item.update()
|
||||
if keep_reversed:
|
||||
setattr(item, rel_name, None)
|
||||
await item.update()
|
||||
else:
|
||||
await item.delete()
|
||||
|
||||
async def add(self, item: "Model") -> None:
|
||||
if self.type_ == ormar.RelationType.MULTIPLE:
|
||||
@ -83,6 +91,7 @@ class RelationProxy(list):
|
||||
rel_name = item.resolve_relation_name(item, self._owner)
|
||||
setattr(item, rel_name, self._owner)
|
||||
else:
|
||||
self._check_if_model_saved()
|
||||
related_field = self._owner.resolve_relation_field(
|
||||
self.relation.to, self._owner
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user