我刚刚在Django 1.9中开始一个新项目,由于某种原因无法将我的模型从一个应用程序导入到另一个应用程序。以下是我的文件结构:
├── apps
├── __init__.py
├── main
|--__init__.py
|--models.py
└── contacts
|--__init__.py
|--models.py
├── config
├── __init__.py
├── settings.py
└── wsgi.py
我在settings.py中的INSTALLED_APPS
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.main',
'apps.contacts',
]
出于某种原因,自升级到1.9后,此导入
from apps.main.models import BaseUser
contacts / models.py中的返回以下错误。
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/kendallcole/.virtualenvs/trickledowncrm/lib/python2.7/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
utility.execute()
File "/Users/kendallcole/.virtualenvs/trickledowncrm/lib/python2.7/site-packages/django/core/management/__init__.py", line 324, in execute
django.setup()
File "/Users/kendallcole/.virtualenvs/trickledowncrm/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/kendallcole/.virtualenvs/trickledowncrm/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/Users/kendallcole/.virtualenvs/trickledowncrm/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/Users/kendallcole/Desktop/trickledowncrm/apps/contacts/models.py", line 4, in <module>
from apps.main.models import BaseUser
ImportError: No module named main.models
答案 0 :(得分:3)
我遇到了这个问题,因为使用Django apps registry described here解决了这个问题。
我试图从另一个名为warehouse
的应用中导入模型:
from warehouse.models import Member
这给了我同样的错误。我通过将模型分配给变量而不是尝试导入warehouse
模型来解决它:
from django.apps import apps
class ModelFromAnotherApp(models.Model):
...
def method_using_model_from_another_app:
member = apps.get_model('warehouse.Member')
x = members.objects.filter(...)
...
答案 1 :(得分:1)
我有类似的问题,我在1.8开始了一个项目,然后升级到1.9。一切正常,直到我在1.9升级后创建了一个新的应用程序。我只是删除了新应用程序中的apps.py文件,一切正常。不知道为什么这是一个问题,但
答案 2 :(得分:1)
将您的应用目录名称更改为应用。如果您使用startapp命令创建了应用程序,则会有一个名为apps.py的文件。我认为这会导致冲突。
├── app
├── __init__.py
├── main
|--__init__.py
|--models.py
└── contacts
|--__init__.py
|--models.py
├── config
├── __init__.py
├── settings.py
└── wsgi.py