Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 24 additions & 6 deletions tortoise/fields/relational.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

MODEL = TypeVar("MODEL", bound="Model")

_UNSET: object = object() # sentinel for detecting omitted on_delete


class _NoneAwaitable:
__slots__ = ()
Expand Down Expand Up @@ -317,13 +319,21 @@ def __init__(
self,
model_name: type[Model] | str,
related_name: str | None | Literal[False] = None,
on_delete: OnDelete = CASCADE,
on_delete: OnDelete = _UNSET, # type: ignore[assignment]
**kwargs: Any,
) -> None:
super().__init__(None, **kwargs) # type:ignore[arg-type]
self.validate_model_name(model_name)
self.model_name = model_name
self.related_name = related_name
if on_delete is _UNSET:
warnings.warn(
"Not passing `on_delete` to ForeignKeyField is deprecated and will be an error "
"in a future release. Pass `on_delete` explicitly (e.g. on_delete=fields.CASCADE).",
DeprecationWarning,
stacklevel=3,
)
on_delete = CASCADE
if on_delete not in set(OnDelete):
raise ConfigurationError(
"on_delete can only be CASCADE, RESTRICT, SET_NULL, SET_DEFAULT or NO_ACTION"
Expand Down Expand Up @@ -360,7 +370,7 @@ def __init__(
self,
model_name: type[MODEL] | str,
related_name: str | None | Literal[False] = None,
on_delete: OnDelete = CASCADE,
on_delete: OnDelete = _UNSET, # type: ignore[assignment]
**kwargs: Any,
) -> None:
super().__init__(model_name, related_name, on_delete, unique=True, **kwargs)
Expand All @@ -386,7 +396,7 @@ def __init__(
forward_key: str | None = None,
backward_key: str = "",
related_name: str = "",
on_delete: OnDelete = CASCADE,
on_delete: OnDelete = _UNSET, # type: ignore[assignment]
field_type: type[MODEL] = None, # type: ignore
unique: bool = True,
**kwargs: Any,
Expand All @@ -400,6 +410,14 @@ def __init__(
stacklevel=2,
)
unique = kwargs.pop("create_unique_index")
if on_delete is _UNSET:
warnings.warn(
"Not passing `on_delete` to ManyToManyField is deprecated and will be an error "
"in a future release. Pass `on_delete` explicitly (e.g. on_delete=fields.CASCADE).",
DeprecationWarning,
stacklevel=3,
)
on_delete = CASCADE
super().__init__(field_type, unique=unique, **kwargs)
self.validate_model_name(model_name)
self.model_name = model_name
Expand Down Expand Up @@ -459,7 +477,7 @@ def OneToOneField(
def OneToOneField(
to: type[MODEL] | str,
related_name: str | None | Literal[False] = None,
on_delete: OnDelete = CASCADE,
on_delete: OnDelete = _UNSET, # type: ignore[assignment]
db_constraint: bool = True,
null: bool = False,
**kwargs: Any,
Expand Down Expand Up @@ -534,7 +552,7 @@ def ForeignKeyField(
def ForeignKeyField(
to: type[MODEL] | str,
related_name: str | None | Literal[False] = None,
on_delete: OnDelete = CASCADE,
on_delete: OnDelete = _UNSET, # type: ignore[assignment]
db_constraint: bool = True,
null: bool = False,
**kwargs: Any,
Expand Down Expand Up @@ -589,7 +607,7 @@ def ManyToManyField(
forward_key: str | None = None,
backward_key: str = "",
related_name: str = "",
on_delete: OnDelete = CASCADE,
on_delete: OnDelete = _UNSET, # type: ignore[assignment]
db_constraint: bool = True,
unique: bool = True,
**kwargs: Any,
Expand Down