from typing import (Any, Callable, Dict, Iterator, List, Optional, Tuple, Type, Union) from django.db import IntegrityError from django.db.models.base import Model from django.db.models.fields.related import ForeignKey from django.db.models.fields.reverse_related import ManyToOneRel from django.db.models.options import Options from django.db.models.query import QuerySet class ProtectedError(IntegrityError): protected_objects: django.db.models.query.QuerySet = ... def __init__( self, msg: str, protected_objects: Union[List[Model], QuerySet] ) -> None: ... def CASCADE( collector: Collector, field: ForeignKey, sub_objs: QuerySet, using: str ) -> None: ... def PROTECT( collector: Collector, field: ForeignKey, sub_objs: QuerySet, using: str ) -> Any: ... def SET(value: Callable) -> Callable: ... def SET_NULL( collector: Collector, field: ForeignKey, sub_objs: QuerySet, using: str ) -> None: ... def SET_DEFAULT( collector: Collector, field: ForeignKey, sub_objs: QuerySet, using: str ) -> None: ... def DO_NOTHING( collector: Any, field: Any, sub_objs: Any, using: Any ) -> None: ... def get_candidate_relations_to_delete(opts: Options) -> Iterator[Any]: ... class Collector: using: str = ... data: collections.OrderedDict = ... field_updates: Dict[Any, Any] = ... fast_deletes: List[Any] = ... dependencies: Dict[Any, Any] = ... def __init__(self, using: str) -> None: ... def add( self, objs: Union[List[Model], QuerySet], source: Optional[Type[Model]] = ..., nullable: bool = ..., reverse_dependency: bool = ..., ) -> List[Model]: ... def add_field_update( self, field: ForeignKey, value: Optional[int], objs: QuerySet ) -> None: ... def can_fast_delete( self, objs: Union[List[Model], QuerySet], from_field: Optional[ForeignKey] = ..., ) -> bool: ... def get_del_batches( self, objs: List[Model], field: ForeignKey ) -> List[List[Model]]: ... def collect( self, objs: Union[List[Model], QuerySet], source: Optional[Type[Model]] = ..., nullable: bool = ..., collect_related: bool = ..., source_attr: Optional[str] = ..., reverse_dependency: bool = ..., keep_parents: bool = ..., ) -> None: ... def related_objects( self, related: ManyToOneRel, objs: List[Model] ) -> QuerySet: ... def instances_with_model(self) -> Iterator[Tuple[Type[Model], Model]]: ... def sort(self) -> None: ... def delete(self) -> Tuple[int, Dict[str, int]]: ...