@@ -15,6 +15,7 @@ from django.db.models.fields.reverse_related import ForeignObjectRel
1515from django .db .models .query import _OrderByFieldName
1616from django .db .models .query_utils import Q , RegisterLookupMixin
1717from django .db .models .sql .compiler import SQLCompiler , _AsSqlType , _ParamsT
18+ from django .forms .widgets import Widget
1819from django .utils .choices import BlankChoiceIterator , _Choice , _ChoiceNamedGroup , _ChoicesCallable , _ChoicesInput
1920from django .utils .datastructures import DictWrapper
2021from django .utils .functional import _Getter , _StrOrPromise , cached_property
@@ -248,10 +249,25 @@ class Field(RegisterLookupMixin, Generic[_ST, _GT]):
248249 @property
249250 def flatchoices (self ) -> list [_Choice ]: ...
250251 def save_form_data (self , instance : Model , data : Any ) -> None : ...
252+ # form_class/choices_form_class are positional at runtime, but every Django
253+ # and third-party caller passes them as keyword args. Marking them keyword-only
254+ # here avoids needing an identical override on every Field subclass.
251255 def formfield (
252256 self ,
253- form_class : type [forms .Field ] | None = None ,
254- choices_form_class : type [forms .ChoiceField ] | None = None ,
257+ * ,
258+ form_class : type [forms .Field ] | None = ...,
259+ choices_form_class : type [forms .ChoiceField ] | None = ...,
260+ required : bool = ...,
261+ widget : Widget | type [Widget ] | None = ...,
262+ label : _StrOrPromise | None = ...,
263+ initial : Any | None = ...,
264+ help_text : _StrOrPromise = ...,
265+ error_messages : _ErrorMessagesMapping | None = ...,
266+ show_hidden_initial : bool = ...,
267+ validators : Iterable [_ValidatorCallable ] = ...,
268+ localize : bool = ...,
269+ disabled : bool = ...,
270+ label_suffix : str | None = ...,
255271 ** kwargs : Any ,
256272 ) -> forms .Field | None : ...
257273 def value_from_object (self , obj : Model ) -> _GT : ...
@@ -261,8 +277,6 @@ class IntegerField(Field[_ST, _GT]):
261277 _pyi_private_set_type : float | int | str | Combinable
262278 _pyi_private_get_type : int
263279 _pyi_lookup_exact_type : str | int
264- @override
265- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
266280
267281class PositiveIntegerRelDbTypeMixin :
268282 def rel_db_type (self , connection : BaseDatabaseWrapper ) -> str : ...
@@ -271,30 +285,20 @@ class SmallIntegerField(IntegerField[_ST, _GT]): ...
271285
272286class BigIntegerField (IntegerField [_ST , _GT ]):
273287 MAX_BIGINT : ClassVar [int ]
274- @override
275- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
276288
277289class PositiveIntegerField (PositiveIntegerRelDbTypeMixin , IntegerField [_ST , _GT ]):
278290 integer_field_class : type [IntegerField ]
279- @override
280- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
281291
282292class PositiveSmallIntegerField (PositiveIntegerRelDbTypeMixin , SmallIntegerField [_ST , _GT ]):
283293 integer_field_class : type [SmallIntegerField ]
284- @override
285- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
286294
287295class PositiveBigIntegerField (PositiveIntegerRelDbTypeMixin , BigIntegerField [_ST , _GT ]):
288296 integer_field_class : type [BigIntegerField ]
289- @override
290- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
291297
292298class FloatField (Field [_ST , _GT ]):
293299 _pyi_private_set_type : float | int | str | Combinable
294300 _pyi_private_get_type : float
295301 _pyi_lookup_exact_type : float
296- @override
297- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
298302
299303class DecimalField (Field [_ST , _GT ]):
300304 _pyi_private_set_type : str | float | decimal .Decimal | Combinable
@@ -330,8 +334,6 @@ class DecimalField(Field[_ST, _GT]):
330334 ) -> None : ...
331335 @cached_property
332336 def context (self ) -> decimal .Context : ...
333- @override
334- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
335337
336338class CharField (Field [_ST , _GT ]):
337339 _pyi_private_set_type : str | int | Combinable
@@ -366,8 +368,6 @@ class CharField(Field[_ST, _GT]):
366368 * ,
367369 db_collation : str | None = None ,
368370 ) -> None : ...
369- @override
370- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
371371
372372class CommaSeparatedIntegerField (CharField [_ST , _GT ]): ...
373373
@@ -400,13 +400,9 @@ class SlugField(CharField[_ST, _GT]):
400400 db_index : bool = True ,
401401 allow_unicode : bool = False ,
402402 ) -> None : ...
403- @override
404- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
405403
406404class EmailField (CharField [_ST , _GT ]):
407405 _pyi_private_set_type : str | Combinable
408- @override
409- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
410406
411407class URLField (CharField [_ST , _GT ]):
412408 def __init__ (
@@ -437,8 +433,6 @@ class URLField(CharField[_ST, _GT]):
437433 validators : Iterable [_ValidatorCallable ] = ...,
438434 error_messages : _ErrorMessagesMapping | None = ...,
439435 ) -> None : ...
440- @override
441- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
442436
443437class TextField (Field [_ST , _GT ]):
444438 _pyi_private_set_type : str | Combinable
@@ -473,15 +467,11 @@ class TextField(Field[_ST, _GT]):
473467 * ,
474468 db_collation : str | None = None ,
475469 ) -> None : ...
476- @override
477- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
478470
479471class BooleanField (Field [_ST , _GT ]):
480472 _pyi_private_set_type : bool | Combinable
481473 _pyi_private_get_type : bool
482474 _pyi_lookup_exact_type : bool
483- @override
484- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
485475
486476class NullBooleanField (BooleanField [_ST , _GT ]):
487477 _pyi_private_set_type : bool | Combinable | None # type: ignore[assignment]
@@ -523,8 +513,6 @@ class GenericIPAddressField(Field[_ST, _GT]):
523513 validators : Iterable [_ValidatorCallable ] = ...,
524514 error_messages : _ErrorMessagesMapping | None = ...,
525515 ) -> None : ...
526- @override
527- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
528516
529517class DateTimeCheckMixin :
530518 def check (self , ** kwargs : Any ) -> list [CheckMessage ]: ...
@@ -563,8 +551,6 @@ class DateField(DateTimeCheckMixin, Field[_ST, _GT]):
563551 ) -> None : ...
564552 @override
565553 def contribute_to_class (self , cls : type [Model ], name : str , ** kwargs : Any ) -> None : ... # type: ignore[override]
566- @override
567- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
568554
569555class TimeField (DateTimeCheckMixin , Field [_ST , _GT ]):
570556 _pyi_private_set_type : str | time | real_datetime | Combinable
@@ -596,15 +582,11 @@ class TimeField(DateTimeCheckMixin, Field[_ST, _GT]):
596582 validators : Iterable [_ValidatorCallable ] = ...,
597583 error_messages : _ErrorMessagesMapping | None = ...,
598584 ) -> None : ...
599- @override
600- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
601585
602586class DateTimeField (DateField [_ST , _GT ]):
603587 _pyi_private_set_type : str | real_datetime | date | Combinable
604588 _pyi_private_get_type : real_datetime
605589 _pyi_lookup_exact_type : str | real_datetime
606- @override
607- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
608590
609591class UUIDField (Field [_ST , _GT ]):
610592 _pyi_private_set_type : str | uuid .UUID
@@ -638,8 +620,6 @@ class UUIDField(Field[_ST, _GT]):
638620 validators : Iterable [_ValidatorCallable ] = ...,
639621 error_messages : _ErrorMessagesMapping | None = ...,
640622 ) -> None : ...
641- @override
642- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
643623
644624class FilePathField (Field [_ST , _GT ]):
645625 path : Any
@@ -676,17 +656,13 @@ class FilePathField(Field[_ST, _GT]):
676656 validators : Iterable [_ValidatorCallable ] = ...,
677657 error_messages : _ErrorMessagesMapping | None = ...,
678658 ) -> None : ...
679- @override
680- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
681659
682660class BinaryField (Field [_ST , _GT ]):
683661 _pyi_private_get_type : bytes | memoryview
684662 def get_placeholder (self , value : Any , compiler : SQLCompiler , connection : BaseDatabaseWrapper ) -> str : ...
685663
686664class DurationField (Field [_ST , _GT ]):
687665 _pyi_private_get_type : timedelta
688- @override
689- def formfield (self , ** kwargs : Any ) -> forms .Field | None : ... # type: ignore[override]
690666
691667class AutoFieldMixin :
692668 db_returning : bool
0 commit comments