Я пытаюсь создать приложение django с несколькими субаппами. Мой текущий макет каталог для приложения является (отфильтровываются admin.py, test.py и views.py для краткости):django приложение с subapps. app_labels для субпапсов и отношений между ними.
myapp
__init__.py
models.py
subapp1/
__init__.py
models.py
subapp2
__init__.py
models.py
Где MyApp/models.py выглядит следующим образом:
class Foo(models.Model):
name = models.CharField(max_length=32)
и MyApp/subapp1/models.py выглядит следующим образом:
class Bar(models.Model):
foo = models.ForeignKey('myapp.Foo')
some_other_field = models.CharField(max_length=32)
и MyApp/subapp2/models.py выглядит как:
class Baz(models.Model):
bar = models.ForeignKey('subapp1.Bar')
В моей settings.py у меня есть:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'myapp.subapp1',
'myapp.subapp2'
)
Однако, когда я пытаюсь запустить ./manage.py makemigrations myapp.subapp1
я получаю ошибку:
App 'myapp.subapp1' could not be found. Is it in INSTALLED_APPS?
Но I am может успешно выполнить ./manage.py makemigrations subapp1
и эквивалент для subapp2. Я беспокоюсь о конфликтах пространства имен приложений.
Если я добавить MyApp/subapp1/apps.py
from django.apps import AppConfig
class SubApp1Config(AppConfig):
name = 'myapp.subapp1'
label = 'myapp.subapp1'
, а затем MyApp/subapp1/__ init__.py
default_app_config = 'myapp.subapp1.apps.SubApp1Config'
ли эквивалент для «MyApp/subapp2 'и закомментировать «myapp.app2» от INSTALLED_APPS
Затем я могу запустить ./manage.py makemigrations myapp.subapp1
успешно.
Однако если бы я тогда раскомментируйте myapp.subapp2
от INSTALLED_APPS
и изменить MyApp/subapp2/models.py выглядеть следующим образом:
class Baz(models.Model):
bar = models.ForeignKey('myapp.subapp1.Bar')
, а затем запустить ./manage.py makemigrations myapp.subapp2
я получаю:
SystemCheckError: System check identified some issues:
ERRORS:
myapp.subapp2.Baz.bar: (fields.E300) Field defines a relation with model 'myapp.subapp1.Bar', which is either not installed, or is abstract.
Как я могу описать отношение внешних ключей между myapp.subapp2.Baz.bar
и myapp.subapp1.Bar
?
Заранее спасибо.