【发布时间】:2016-07-11 12:51:21
【问题描述】:
我正在尝试创建一个包含多个子应用的 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?
但我 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' 执行相同的操作,并从 INSTALLED_APPS 中注释掉 'myapp.app2'
然后我可以成功运行./manage.py makemigrations myapp.subapp1。
但是,如果我随后从 INSTALLED_APPS 中取消注释 myapp.subapp2
并将 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 之间的外键关系?
提前致谢。
【问题讨论】:
标签: django namespaces foreign-key-relationship django-apps subapplication