fixed in general

This commit is contained in:
collerek
2020-12-15 14:11:46 +01:00
parent 1b42d321b9
commit daf47f891e
9 changed files with 71 additions and 27 deletions

View File

@ -49,7 +49,10 @@ class Relation:
if i not in self._to_remove
]
self.related_models = RelationProxy(
relation=self, type_=self._type, field_name=self.field_name, data_=cleaned_data
relation=self,
type_=self._type,
field_name=self.field_name,
data_=cleaned_data,
)
relation_name = self._owner.resolve_relation_name(self._owner, self.to)
self._owner.__dict__[relation_name] = cleaned_data

View File

@ -65,17 +65,17 @@ class RelationsManager:
relation_name: str,
) -> None:
to_field: Type[BaseField] = child.Meta.model_fields[relation_name]
print('comming', child_name, relation_name)
# print('comming', child_name, relation_name)
(parent, child, child_name, to_name,) = get_relations_sides_and_names(
to_field, parent, child, child_name, virtual
)
print('adding', parent.get_name(), child.get_name(), child_name)
# print('adding', parent.get_name(), child.get_name(), child_name)
parent_relation = parent._orm._get(child_name)
if parent_relation:
parent_relation.add(child) # type: ignore
print('adding', child.get_name(), parent.get_name(), child_name)
# print('adding', child.get_name(), parent.get_name(), child_name)
child_relation = child._orm._get(to_name)
if child_relation:
child_relation.add(parent)

View File

@ -1,4 +1,4 @@
from typing import Any, TYPE_CHECKING
from typing import Any, Optional, TYPE_CHECKING
import ormar
from ormar.exceptions import NoMatch, RelationshipInstanceError
@ -12,7 +12,11 @@ if TYPE_CHECKING: # pragma no cover
class RelationProxy(list):
def __init__(
self, relation: "Relation", type_: "RelationType", field_name: str, data_: Any = None
self,
relation: "Relation",
type_: "RelationType",
field_name: str,
data_: Any = None,
) -> None:
super().__init__(data_ or ())
self.relation: "Relation" = relation
@ -20,8 +24,17 @@ class RelationProxy(list):
self.field_name = field_name
self._owner: "Model" = self.relation.manager.owner
self.queryset_proxy = QuerysetProxy(relation=self.relation, type_=type_)
self._related_field_name: Optional[str] = None
@property
def related_field_name(self) -> str:
if self._related_field_name:
return self._related_field_name
owner_field = self._owner.Meta.model_fields[self.field_name]
self.related_field_name = owner_field.related_name or self._owner.get_name() + 's'
self._related_field_name = (
owner_field.related_name or self._owner.get_name() + "s"
)
return self._related_field_name
def __getattribute__(self, item: str) -> Any:
if item in ["count", "clear"]: