add default exceptions to relations, test one argument, test querysetproxy, test deeply nested
This commit is contained in:
@ -11,7 +11,7 @@ from pydantic.typing import ForwardRef, evaluate_forwardref
|
||||
from sqlalchemy import UniqueConstraint
|
||||
|
||||
import ormar # noqa I101
|
||||
from ormar.exceptions import RelationshipInstanceError
|
||||
from ormar.exceptions import ModelDefinitionError, RelationshipInstanceError
|
||||
from ormar.fields.base import BaseField
|
||||
|
||||
if TYPE_CHECKING: # pragma no cover
|
||||
@ -184,6 +184,11 @@ def ForeignKey( # noqa CFQ002
|
||||
|
||||
owner = kwargs.pop("owner", None)
|
||||
self_reference = kwargs.pop("self_reference", False)
|
||||
default = kwargs.pop("default", None)
|
||||
if default is not None:
|
||||
raise ModelDefinitionError(
|
||||
"Argument 'default' is not supported " "on relation fields!"
|
||||
)
|
||||
|
||||
if to.__class__ == ForwardRef:
|
||||
__type__ = to if not nullable else Optional[to]
|
||||
|
||||
@ -96,6 +96,12 @@ def ManyToMany(
|
||||
if through is not None and through.__class__ != ForwardRef:
|
||||
forbid_through_relations(cast(Type["Model"], through))
|
||||
|
||||
default = kwargs.pop("default", None)
|
||||
if default is not None:
|
||||
raise ModelDefinitionError(
|
||||
"Argument 'default' is not supported " "on relation fields!"
|
||||
)
|
||||
|
||||
if to.__class__ == ForwardRef:
|
||||
__type__ = to if not nullable else Optional[to]
|
||||
column_type = None
|
||||
|
||||
@ -374,7 +374,7 @@ class QuerysetProxy:
|
||||
model = await self.queryset.get(pk=kwargs[pk_name])
|
||||
return await model.update(**kwargs)
|
||||
|
||||
def filter(self, **kwargs: Any) -> "QuerysetProxy": # noqa: A003, A001
|
||||
def filter(self, *args: Any, **kwargs: Any) -> "QuerysetProxy": # noqa: A003, A001
|
||||
"""
|
||||
Allows you to filter by any `Model` attribute/field
|
||||
as well as to fetch instances, with a filter across an FK relationship.
|
||||
@ -404,10 +404,10 @@ class QuerysetProxy:
|
||||
:return: filtered QuerysetProxy
|
||||
:rtype: QuerysetProxy
|
||||
"""
|
||||
queryset = self.queryset.filter(**kwargs)
|
||||
queryset = self.queryset.filter(*args, **kwargs)
|
||||
return self.__class__(relation=self.relation, type_=self.type_, qryset=queryset)
|
||||
|
||||
def exclude(self, **kwargs: Any) -> "QuerysetProxy": # noqa: A003, A001
|
||||
def exclude(self, *args: Any, **kwargs: Any) -> "QuerysetProxy": # noqa: A003, A001
|
||||
"""
|
||||
Works exactly the same as filter and all modifiers (suffixes) are the same,
|
||||
but returns a *not* condition.
|
||||
@ -428,7 +428,7 @@ class QuerysetProxy:
|
||||
:return: filtered QuerysetProxy
|
||||
:rtype: QuerysetProxy
|
||||
"""
|
||||
queryset = self.queryset.exclude(**kwargs)
|
||||
queryset = self.queryset.exclude(*args, **kwargs)
|
||||
return self.__class__(relation=self.relation, type_=self.type_, qryset=queryset)
|
||||
|
||||
def select_related(self, related: Union[List, str]) -> "QuerysetProxy":
|
||||
|
||||
Reference in New Issue
Block a user