在Django 1.9中的应用程序之间导入模型

时间:2015-12-02 19:06:24

标签: django python-2.7 django-models

我刚刚在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

3 个答案:

答案 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