1from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Tuple, Type, TypeVar, Union, overload 2from uuid import UUID 3 4from django.db import models 5from django.db.models.base import Model 6from django.db.models.fields import Field 7from django.db.models.query_utils import Q, PathInfo 8from django.db.models.manager import RelatedManager 9from django.db.models.expressions import Combinable 10from django.db.models.fields.mixins import FieldCacheMixin 11from django.db.models.fields.related_descriptors import ( # noqa: F401 12 ForwardOneToOneDescriptor as ForwardOneToOneDescriptor, 13 ForwardManyToOneDescriptor as ForwardManyToOneDescriptor, 14 ManyToManyDescriptor as ManyToManyDescriptor, 15 ReverseOneToOneDescriptor as ReverseOneToOneDescriptor, 16 ReverseManyToOneDescriptor as ReverseManyToOneDescriptor, 17) 18from django.db.models.fields.reverse_related import ( # noqa: F401 19 ForeignObjectRel as ForeignObjectRel, 20 OneToOneRel as OneToOneRel, 21 ManyToOneRel as ManyToOneRel, 22 ManyToManyRel as ManyToManyRel, 23) 24 25_T = TypeVar("_T", bound=models.Model) 26_F = TypeVar("_F", bound=models.Field) 27_Choice = Tuple[Any, str] 28_ChoiceNamedGroup = Tuple[str, Iterable[_Choice]] 29_FieldChoices = Iterable[Union[_Choice, _ChoiceNamedGroup]] 30 31_ValidatorCallable = Callable[..., None] 32_ErrorMessagesToOverride = Dict[str, Any] 33 34RECURSIVE_RELATIONSHIP_CONSTANT: str = ... 35 36# __set__ value type 37_ST = TypeVar("_ST") 38# __get__ return type 39_GT = TypeVar("_GT") 40 41class RelatedField(FieldCacheMixin, Field[_ST, _GT]): 42 one_to_many: bool = ... 43 one_to_one: bool = ... 44 many_to_many: bool = ... 45 many_to_one: bool = ... 46 related_model: Type[Model] 47 opts: Any = ... 48 def get_forward_related_filter(self, obj: Model) -> Dict[str, Union[int, UUID]]: ... 49 def get_reverse_related_filter(self, obj: Model) -> Q: ... 50 @property 51 def swappable_setting(self) -> Optional[str]: ... 52 def set_attributes_from_rel(self) -> None: ... 53 def do_related_class(self, other: Type[Model], cls: Type[Model]) -> None: ... 54 def get_limit_choices_to(self) -> Dict[str, int]: ... 55 def related_query_name(self) -> str: ... 56 @property 57 def target_field(self) -> Field: ... 58 59class ForeignObject(RelatedField[_ST, _GT]): 60 def __init__( 61 self, 62 to: Union[Type[Model], str], 63 on_delete: Callable[..., None], 64 from_fields: Sequence[str], 65 to_fields: Sequence[str], 66 rel: Optional[ForeignObjectRel] = ..., 67 related_name: Optional[str] = ..., 68 related_query_name: Optional[str] = ..., 69 limit_choices_to: Optional[Union[Dict[str, Any], Callable[[], Any]]] = ..., 70 parent_link: bool = ..., 71 db_constraint: bool = ..., 72 swappable: bool = ..., 73 verbose_name: Optional[str] = ..., 74 name: Optional[str] = ..., 75 primary_key: bool = ..., 76 unique: bool = ..., 77 blank: bool = ..., 78 null: bool = ..., 79 db_index: bool = ..., 80 default: Any = ..., 81 editable: bool = ..., 82 auto_created: bool = ..., 83 serialize: bool = ..., 84 choices: Optional[_FieldChoices] = ..., 85 help_text: str = ..., 86 db_column: Optional[str] = ..., 87 db_tablespace: Optional[str] = ..., 88 validators: Iterable[_ValidatorCallable] = ..., 89 error_messages: Optional[_ErrorMessagesToOverride] = ..., 90 ): ... 91 92class ForeignKey(ForeignObject[_ST, _GT]): 93 _pyi_private_set_type: Union[Any, Combinable] 94 _pyi_private_get_type: Any 95 def __init__( 96 self, 97 to: Union[Type[Model], str], 98 on_delete: Callable[..., None], 99 to_field: Optional[str] = ..., 100 related_name: Optional[str] = ..., 101 related_query_name: Optional[str] = ..., 102 limit_choices_to: Optional[Union[Dict[str, Any], Callable[[], Any], Q]] = ..., 103 parent_link: bool = ..., 104 db_constraint: bool = ..., 105 verbose_name: Optional[Union[str, bytes]] = ..., 106 name: Optional[str] = ..., 107 primary_key: bool = ..., 108 max_length: Optional[int] = ..., 109 unique: bool = ..., 110 blank: bool = ..., 111 null: bool = ..., 112 db_index: bool = ..., 113 default: Any = ..., 114 editable: bool = ..., 115 auto_created: bool = ..., 116 serialize: bool = ..., 117 unique_for_date: Optional[str] = ..., 118 unique_for_month: Optional[str] = ..., 119 unique_for_year: Optional[str] = ..., 120 choices: Optional[_FieldChoices] = ..., 121 help_text: str = ..., 122 db_column: Optional[str] = ..., 123 db_tablespace: Optional[str] = ..., 124 validators: Iterable[_ValidatorCallable] = ..., 125 error_messages: Optional[_ErrorMessagesToOverride] = ..., 126 ): ... 127 # class access 128 @overload # type: ignore 129 def __get__(self, instance: None, owner) -> ForwardManyToOneDescriptor: ... 130 # Model instance access 131 @overload 132 def __get__(self, instance: Model, owner) -> _GT: ... 133 # non-Model instances 134 @overload 135 def __get__(self: _F, instance, owner) -> _F: ... 136 137class OneToOneField(RelatedField[_ST, _GT]): 138 _pyi_private_set_type: Union[Any, Combinable] 139 _pyi_private_get_type: Any 140 def __init__( 141 self, 142 to: Union[Type[Model], str], 143 on_delete: Any, 144 to_field: Optional[str] = ..., 145 related_name: Optional[str] = ..., 146 related_query_name: Optional[str] = ..., 147 limit_choices_to: Optional[Union[Dict[str, Any], Callable[[], Any], Q]] = ..., 148 parent_link: bool = ..., 149 db_constraint: bool = ..., 150 verbose_name: Optional[Union[str, bytes]] = ..., 151 name: Optional[str] = ..., 152 primary_key: bool = ..., 153 max_length: Optional[int] = ..., 154 unique: bool = ..., 155 blank: bool = ..., 156 null: bool = ..., 157 db_index: bool = ..., 158 default: Any = ..., 159 editable: bool = ..., 160 auto_created: bool = ..., 161 serialize: bool = ..., 162 unique_for_date: Optional[str] = ..., 163 unique_for_month: Optional[str] = ..., 164 unique_for_year: Optional[str] = ..., 165 choices: Optional[_FieldChoices] = ..., 166 help_text: str = ..., 167 db_column: Optional[str] = ..., 168 db_tablespace: Optional[str] = ..., 169 validators: Iterable[_ValidatorCallable] = ..., 170 error_messages: Optional[_ErrorMessagesToOverride] = ..., 171 ): ... 172 # class access 173 @overload # type: ignore 174 def __get__(self, instance: None, owner) -> ForwardOneToOneDescriptor: ... 175 # Model instance access 176 @overload 177 def __get__(self, instance: Model, owner) -> _GT: ... 178 # non-Model instances 179 @overload 180 def __get__(self: _F, instance, owner) -> _F: ... 181 182class ManyToManyField(RelatedField[_ST, _GT]): 183 _pyi_private_set_type: Sequence[Any] 184 _pyi_private_get_type: RelatedManager[Any] 185 186 rel_class: Any = ... 187 description: Any = ... 188 has_null_arg: Any = ... 189 swappable: bool = ... 190 def __init__( 191 self, 192 to: Union[Type[_T], str], 193 related_name: Optional[str] = ..., 194 related_query_name: Optional[str] = ..., 195 limit_choices_to: Optional[Union[Dict[str, Any], Callable[[], Any], Q]] = ..., 196 symmetrical: Optional[bool] = ..., 197 through: Optional[Union[str, Type[Model]]] = ..., 198 through_fields: Optional[Tuple[str, str]] = ..., 199 db_constraint: bool = ..., 200 db_table: Optional[str] = ..., 201 swappable: bool = ..., 202 verbose_name: Optional[Union[str, bytes]] = ..., 203 name: Optional[str] = ..., 204 primary_key: bool = ..., 205 max_length: Optional[int] = ..., 206 unique: bool = ..., 207 blank: bool = ..., 208 null: bool = ..., 209 db_index: bool = ..., 210 default: Any = ..., 211 editable: bool = ..., 212 auto_created: bool = ..., 213 serialize: bool = ..., 214 unique_for_date: Optional[str] = ..., 215 unique_for_month: Optional[str] = ..., 216 unique_for_year: Optional[str] = ..., 217 choices: Optional[_FieldChoices] = ..., 218 help_text: str = ..., 219 db_column: Optional[str] = ..., 220 db_tablespace: Optional[str] = ..., 221 validators: Iterable[_ValidatorCallable] = ..., 222 error_messages: Optional[_ErrorMessagesToOverride] = ..., 223 ) -> None: ... 224 # class access 225 @overload # type: ignore 226 def __get__(self, instance: None, owner) -> ManyToManyDescriptor: ... 227 # Model instance access 228 @overload 229 def __get__(self, instance: Model, owner) -> _GT: ... 230 # non-Model instances 231 @overload 232 def __get__(self: _F, instance, owner) -> _F: ... 233 def get_path_info(self, filtered_relation: None = ...) -> List[PathInfo]: ... 234 def get_reverse_path_info(self, filtered_relation: None = ...) -> List[PathInfo]: ... 235 def contribute_to_related_class(self, cls: Type[Model], related: RelatedField) -> None: ... 236 def m2m_db_table(self) -> str: ... 237 def m2m_column_name(self) -> str: ... 238 def m2m_reverse_name(self) -> str: ... 239 def m2m_reverse_field_name(self) -> str: ... 240 def m2m_target_field_name(self) -> str: ... 241 def m2m_reverse_target_field_name(self) -> str: ... 242 243def create_many_to_many_intermediary_model(field: Type[Field], klass: Type[Model]) -> Type[Model]: ... 244