From b86d33c718bbe26f2608465e7209620ccb45025e Mon Sep 17 00:00:00 2001 From: Maxim Kurnikov Date: Sat, 20 Jul 2019 22:50:37 +0300 Subject: [PATCH] allow custom app label for ForeignKey --- mypy_django_plugin/django/context.py | 3 +++ test-data/typecheck/fields/test_related.yml | 27 +++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/mypy_django_plugin/django/context.py b/mypy_django_plugin/django/context.py index 7095e4f..831dba2 100644 --- a/mypy_django_plugin/django/context.py +++ b/mypy_django_plugin/django/context.py @@ -50,6 +50,9 @@ def initialize_django(settings_module: str) -> Tuple['Apps', 'LazySettings']: apps.get_models.cache_clear() apps.get_swappable_settings_name.cache_clear() + if not settings.configured: + settings._setup() + apps.populate(settings.INSTALLED_APPS) assert apps.apps_ready diff --git a/test-data/typecheck/fields/test_related.yml b/test-data/typecheck/fields/test_related.yml index 9c20191..7287166 100644 --- a/test-data/typecheck/fields/test_related.yml +++ b/test-data/typecheck/fields/test_related.yml @@ -451,3 +451,30 @@ class Book(models.Model): publisher = models.ForeignKey(to=settings.BOOK_RELATED_MODEL, on_delete=models.CASCADE, related_name='books') + +- case: foreign_key_with_custom_app_name + main: | + from myapp.models import MyMain + reveal_type(MyMain().user) # N: Revealed type is 'myapp2.models.MyUser*' + installed_apps: + - myapp + - myapp2.apps.MyApp2Config + files: + - path: myapp/__init__.py + - path: myapp/models.py + content: | + from django.db import models + class MyMain(models.Model): + user = models.ForeignKey('myapp2__user.MyUser', on_delete=models.CASCADE) + - path: myapp2/__init__.py + - path: myapp2/models.py + content: | + from django.db import models + class MyUser(models.Model): + pass + - path: myapp2/apps.py + content: | + from django.apps.config import AppConfig + class MyApp2Config(AppConfig): + name = 'myapp2' + label = 'myapp2__user'