add objects to model, trade false positive for false negative

This commit is contained in:
Maxim Kurnikov
2019-07-21 01:17:25 +03:00
parent 39fb48b08a
commit a0db24c764
4 changed files with 7 additions and 23 deletions

View File

@@ -16,6 +16,7 @@ class Model(metaclass=ModelBase):
class Meta: ... class Meta: ...
_default_manager: Manager[Model] _default_manager: Manager[Model]
_meta: Options[Any] _meta: Options[Any]
objects: Manager[Any]
pk: Any = ... pk: Any = ...
def __init__(self: _Self, *args, **kwargs) -> None: ... def __init__(self: _Self, *args, **kwargs) -> None: ...
def delete(self, using: Any = ..., keep_parents: bool = ...) -> Tuple[int, Dict[str, int]]: ... def delete(self, using: Any = ..., keep_parents: bool = ...) -> Tuple[int, Dict[str, int]]: ...

View File

@@ -172,13 +172,6 @@ class ManyToManyField(RelatedField[_ST, _GT]):
description: Any = ... description: Any = ...
has_null_arg: Any = ... has_null_arg: Any = ...
swappable: bool = ... swappable: bool = ...
m2m_db_table: str = ...
m2m_column_name: str = ...
m2m_reverse_name: str = ...
m2m_field_name: str = ...
m2m_reverse_field_name: str = ...
m2m_target_field_name: str = ...
m2m_reverse_target_field_name: str = ...
def __init__( def __init__(
self, self,
to: Union[Type[_T], str], to: Union[Type[_T], str],
@@ -217,5 +210,11 @@ class ManyToManyField(RelatedField[_ST, _GT]):
def get_path_info(self, filtered_relation: None = ...) -> List[PathInfo]: ... def get_path_info(self, filtered_relation: None = ...) -> List[PathInfo]: ...
def get_reverse_path_info(self, filtered_relation: None = ...) -> List[PathInfo]: ... def get_reverse_path_info(self, filtered_relation: None = ...) -> List[PathInfo]: ...
def contribute_to_related_class(self, cls: Type[Model], related: RelatedField) -> None: ... def contribute_to_related_class(self, cls: Type[Model], related: RelatedField) -> None: ...
def m2m_db_table(self) -> str: ...
def m2m_column_name(self) -> str: ...
def m2m_reverse_name(self) -> str: ...
def m2m_reverse_field_name(self) -> str: ...
def m2m_target_field_name(self) -> str: ...
def m2m_reverse_target_field_name(self) -> str: ...
def create_many_to_many_intermediary_model(field: Type[Field], klass: Type[Model]) -> Type[Model]: ... def create_many_to_many_intermediary_model(field: Type[Field], klass: Type[Model]) -> Type[Model]: ...

View File

@@ -40,7 +40,6 @@ def determine_proper_manager_type(ctx: FunctionContext) -> MypyType:
if not outer_model_info.has_base(fullnames.MODEL_CLASS_FULLNAME): if not outer_model_info.has_base(fullnames.MODEL_CLASS_FULLNAME):
return ret return ret
api = cast(TypeChecker, ctx.api)
return helpers.reparametrize_instance(ret, [Instance(outer_model_info, [])]) return helpers.reparametrize_instance(ret, [Instance(outer_model_info, [])])

View File

@@ -30,21 +30,6 @@
class Child(Parent): class Child(Parent):
pass pass
- case: if_manager_is_defined_on_model_do_not_add_objects
main: |
from myapp.models import MyModel
reveal_type(MyModel.authors) # N: Revealed type is 'django.db.models.manager.Manager[myapp.models.MyModel]'
MyModel.objects # E: "Type[MyModel]" has no attribute "objects"
installed_apps:
- myapp
files:
- path: myapp/__init__.py
- path: myapp/models.py
content: |
from django.db import models
class MyModel(models.Model):
authors = models.Manager['MyModel']()
- case: test_model_objects_attribute_present_in_case_of_model_cls_passed_as_generic_parameter - case: test_model_objects_attribute_present_in_case_of_model_cls_passed_as_generic_parameter
main: | main: |
from myapp.models import Base, MyModel from myapp.models import Base, MyModel