複数のサブアプリを含む django アプリを作成しようとしています。アプリの現在のディレクトリ レイアウトは次のとおりです (簡潔にするために、admin.py、test.py、views.py を除外しています)。
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?
しかし、subapp2 に相当するものを正常に実行できます。./manage.py makemigrations subapp1
私が心配しているのは、アプリの名前空間の衝突です。
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
でしょうか?
前もって感謝します。