add skip_reverse parameter, add links to related libs, fix weakref error, fix through error with extra=forbid
This commit is contained in:
@ -22,7 +22,7 @@ if TYPE_CHECKING: # pragma no cover
|
||||
from ormar.relations import Relation
|
||||
from ormar.models import Model, T
|
||||
from ormar.queryset import QuerySet
|
||||
from ormar import RelationType
|
||||
from ormar import RelationType, ForeignKeyField
|
||||
else:
|
||||
T = TypeVar("T", bound="Model")
|
||||
|
||||
@ -251,7 +251,7 @@ class QuerysetProxy(Generic[T]):
|
||||
owner_column = self._owner.get_name()
|
||||
else:
|
||||
queryset = ormar.QuerySet(model_cls=self.relation.to) # type: ignore
|
||||
owner_column = self.related_field.name
|
||||
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:
|
||||
@ -367,7 +367,7 @@ class QuerysetProxy(Generic[T]):
|
||||
"""
|
||||
through_kwargs = kwargs.pop(self.through_model_name, {})
|
||||
if self.type_ == ormar.RelationType.REVERSE:
|
||||
kwargs[self.related_field.name] = self._owner
|
||||
kwargs[self.related_field_name] = self._owner
|
||||
created = await self.queryset.create(**kwargs)
|
||||
self._register_related(created)
|
||||
if self.type_ == ormar.RelationType.MULTIPLE:
|
||||
|
||||
@ -124,15 +124,14 @@ class RelationProxy(Generic[T], list):
|
||||
:rtype: QuerySet
|
||||
"""
|
||||
related_field_name = self.related_field_name
|
||||
related_field = self.relation.to.Meta.model_fields[related_field_name]
|
||||
pkname = self._owner.get_column_alias(self._owner.Meta.pkname)
|
||||
self._check_if_model_saved()
|
||||
kwargs = {f"{related_field.name}__{pkname}": self._owner.pk}
|
||||
kwargs = {f"{related_field_name}__{pkname}": self._owner.pk}
|
||||
queryset = (
|
||||
ormar.QuerySet(
|
||||
model_cls=self.relation.to, proxy_source_model=self._owner.__class__
|
||||
)
|
||||
.select_related(related_field.name)
|
||||
.select_related(related_field_name)
|
||||
.filter(**kwargs)
|
||||
)
|
||||
return queryset
|
||||
@ -168,11 +167,12 @@ class RelationProxy(Generic[T], list):
|
||||
super().remove(item)
|
||||
relation_name = self.related_field_name
|
||||
relation = item._orm._get(relation_name)
|
||||
if relation is None: # pragma nocover
|
||||
raise ValueError(
|
||||
f"{self._owner.get_name()} does not have relation {relation_name}"
|
||||
)
|
||||
relation.remove(self._owner)
|
||||
# if relation is None: # pragma nocover
|
||||
# raise ValueError(
|
||||
# f"{self._owner.get_name()} does not have relation {relation_name}"
|
||||
# )
|
||||
if relation:
|
||||
relation.remove(self._owner)
|
||||
self.relation.remove(item)
|
||||
if self.type_ == ormar.RelationType.MULTIPLE:
|
||||
await self.queryset_proxy.delete_through_instance(item)
|
||||
@ -211,7 +211,7 @@ class RelationProxy(Generic[T], list):
|
||||
self._check_if_model_saved()
|
||||
if self.type_ == ormar.RelationType.MULTIPLE:
|
||||
await self.queryset_proxy.create_through_instance(item, **kwargs)
|
||||
setattr(item, relation_name, self._owner)
|
||||
setattr(self._owner, self.field_name, item)
|
||||
else:
|
||||
setattr(item, relation_name, self._owner)
|
||||
await item.update()
|
||||
|
||||
Reference in New Issue
Block a user