diff --git a/django-stubs/db/models/fields/__init__.pyi b/django-stubs/db/models/fields/__init__.pyi index 6add118..6e9ae19 100644 --- a/django-stubs/db/models/fields/__init__.pyi +++ b/django-stubs/db/models/fields/__init__.pyi @@ -56,6 +56,10 @@ class Field(RegisterLookupMixin, Generic[_ST, _GT]): remote_field: Field is_relation: bool related_model: Optional[Type[Model]] + one_to_many: Optional[bool] = ... + one_to_one: Optional[bool] = ... + many_to_many: Optional[bool] = ... + many_to_one: Optional[bool] = ... max_length: int model: Type[Model] name: str diff --git a/test-data/typecheck/db/models/test_init.yml b/test-data/typecheck/db/models/test_init.yml new file mode 100644 index 0000000..afa5b5f --- /dev/null +++ b/test-data/typecheck/db/models/test_init.yml @@ -0,0 +1,26 @@ +- case: field_to_many_and_to_one_attrs_bool_or_none_in_field_base_class + main: | + from django.db.models import Field + + field: Field + my_bool: bool + + my_bool = field.one_to_many + my_bool = field.one_to_one + my_bool = field.many_to_many + my_bool = field.many_to_one + + # Narrowing the types should give us bool + assert field.one_to_many is not None + my_bool = field.one_to_many + assert field.one_to_one is not None + my_bool = field.one_to_one + assert field.many_to_many is not None + my_bool = field.many_to_many + assert field.many_to_one is not None + my_bool = field.many_to_one + out: | + main:6: error: Incompatible types in assignment (expression has type "Optional[bool]", variable has type "bool") + main:7: error: Incompatible types in assignment (expression has type "Optional[bool]", variable has type "bool") + main:8: error: Incompatible types in assignment (expression has type "Optional[bool]", variable has type "bool") + main:9: error: Incompatible types in assignment (expression has type "Optional[bool]", variable has type "bool")