Skip to content

Commit

Permalink
Make AddRelatedManagers look for "objects" on parent model
Browse files Browse the repository at this point in the history
Previously, AddRelatedManagers would fail if a related model had inherited
its `objects` field from a parent class. This would result in missing
relation attributes. This is fixed by using `get()` instead of `names`;
the former searches the MRO for the symbol, whereas the latter only looks
for symbols declared directly on the class.
  • Loading branch information
RJPercival committed Oct 19, 2021
1 parent 2f57fd3 commit 5bb5304
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
5 changes: 3 additions & 2 deletions mypy_django_plugin/transformers/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,8 @@ def run_with_model_cls(self, model_cls: Type[Model]) -> None:
related_manager_info = self.lookup_typeinfo_or_incomplete_defn_error(
fullnames.RELATED_MANAGER_CLASS
) # noqa: E501
if "objects" not in related_model_info.names:
objects = related_model_info.get("objects")
if not objects:
raise helpers.IncompleteDefnException()
except helpers.IncompleteDefnException as exc:
if not self.api.final_iteration:
Expand All @@ -283,7 +284,7 @@ def run_with_model_cls(self, model_cls: Type[Model]) -> None:

# create new RelatedManager subclass
parametrized_related_manager_type = Instance(related_manager_info, [Instance(related_model_info, [])])
default_manager_type = related_model_info.names["objects"].type
default_manager_type = objects.type
if default_manager_type is None:
default_manager_type = self.try_generate_related_manager(related_model_cls, related_model_info)
if (
Expand Down
1 change: 0 additions & 1 deletion tests/typecheck/fields/test_related.yml
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,6 @@
- case: test_foreign_key_from_superclass_inherits_correctly_when_also_inheriting_manager
expect_fail: yes
main: |
from myapp.models import MyUser, Book, Article, LibraryEntity
reveal_type(Book().registered_by_user) # N: Revealed type is "myapp.models.MyUser*"
Expand Down

0 comments on commit 5bb5304

Please sign in to comment.