Skip to content

Commit f650d65

Browse files
committed
Add "Field.formfield" annotations
1 parent e5e3f22 commit f650d65

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

django-stubs/contrib/gis/db/models/fields.pyi

+3-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,9 @@ class GeometryField(BaseSpatialField[_ST, _GT]):
108108
validators: Iterable[_ValidatorCallable] = ...,
109109
error_messages: _ErrorMessagesMapping | None = ...,
110110
) -> None: ...
111-
def formfield(self, **kwargs: Any) -> Any: ... # type: ignore[override]
111+
def formfield( # type: ignore[override]
112+
self, form_class: type[forms.GeometryField] | None = ..., geom_type: str = ..., srid: Any = ..., **kwargs: Any
113+
) -> forms.GeometryField: ...
112114
def select_format(self, compiler: Any, sql: Any, params: Any) -> Any: ...
113115

114116
class PointField(GeometryField[_ST, _GT]):

django-stubs/db/models/fields/__init__.pyi

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ from datetime import date, time, timedelta
55
from datetime import datetime as real_datetime
66
from typing import Any, ClassVar, Generic, Literal, Protocol, TypeVar, overload
77

8+
from django import forms
89
from django.core import validators # due to weird mypy.stubtest error
910
from django.core.checks import CheckMessage
1011
from django.core.exceptions import FieldDoesNotExist as FieldDoesNotExist
@@ -202,7 +203,12 @@ class Field(RegisterLookupMixin, Generic[_ST, _GT]):
202203
def get_db_prep_save(self, value: Any, connection: BaseDatabaseWrapper) -> Any: ...
203204
def get_internal_type(self) -> str: ...
204205
# TODO: plugin support
205-
def formfield(self, form_class: Any | None = ..., choices_form_class: Any | None = ..., **kwargs: Any) -> Any: ...
206+
def formfield(
207+
self,
208+
form_class: type[forms.Field] | None = ...,
209+
choices_form_class: type[forms.ChoiceField] | None = ...,
210+
**kwargs: Any,
211+
) -> forms.Field: ...
206212
def save_form_data(self, instance: Model, data: Any) -> None: ...
207213
def contribute_to_class(self, cls: type[Model], name: str, private_only: bool = ...) -> None: ...
208214
def to_python(self, value: Any) -> Any: ...

scripts/stubtest/allowlist.txt

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ django.contrib.auth.migrations.*
1414
django.contrib.flatpages.migrations.*
1515
django.contrib.contenttypes.migrations.*
1616

17+
# Annotate optional parameters which Django accepts as **kwargs
18+
django.contrib.gis.db.models.GeometryField.formfield
19+
1720
# default_storage is actually an instance of DefaultStorage, but it proxies through to a Storage
1821
django.core.files.storage.default_storage
1922

0 commit comments

Comments
 (0)