change limit/offset with select related to be applied on a subquery and limit only main model query
This commit is contained in:
@ -40,7 +40,7 @@ class AliasManager:
|
||||
return text(f"{name} {alias}_{name}")
|
||||
|
||||
def add_relation_type(
|
||||
self, source_model: Type["Model"], relation_name: str, is_multi: bool = False
|
||||
self, source_model: Type["Model"], relation_name: str
|
||||
) -> None:
|
||||
parent_key = f"{source_model.get_name()}_{relation_name}"
|
||||
if parent_key not in self._aliases_new:
|
||||
@ -50,7 +50,7 @@ class AliasManager:
|
||||
related_name = to_field.related_name
|
||||
if not related_name:
|
||||
related_name = child_model.resolve_relation_name(
|
||||
child_model, source_model, explicit_multi=is_multi
|
||||
child_model, source_model, explicit_multi=True
|
||||
)
|
||||
child_key = f"{child_model.get_name()}_{related_name}"
|
||||
if child_key not in self._aliases_new:
|
||||
|
||||
@ -53,7 +53,7 @@ class QuerysetProxy(ormar.QuerySetProtocol):
|
||||
def _assign_child_to_parent(self, child: Optional["T"]) -> None:
|
||||
if child:
|
||||
owner = self._owner
|
||||
rel_name = owner.resolve_relation_name(owner, child)
|
||||
rel_name = self.relation.field_name
|
||||
setattr(owner, rel_name, child)
|
||||
|
||||
def _register_related(self, child: Union["T", Sequence[Optional["T"]]]) -> None:
|
||||
|
||||
@ -89,11 +89,10 @@ class RelationsManager:
|
||||
|
||||
@staticmethod
|
||||
def remove_parent(
|
||||
item: Union["NewBaseModel", Type["NewBaseModel"]], name: "Model"
|
||||
item: Union["NewBaseModel", Type["NewBaseModel"]], parent: "Model", name: str
|
||||
) -> None:
|
||||
related_model = name
|
||||
rel_name = item.resolve_relation_name(item, related_model)
|
||||
if rel_name in item._orm:
|
||||
relation_name = item.resolve_relation_name(related_model, item)
|
||||
item._orm.remove(rel_name, related_model)
|
||||
related_model._orm.remove(relation_name, item)
|
||||
relation_name = (
|
||||
item.Meta.model_fields[name].related_name or item.get_name() + "s"
|
||||
)
|
||||
item._orm.remove(name, parent)
|
||||
parent._orm.remove(relation_name, item)
|
||||
|
||||
Reference in New Issue
Block a user