如何将模型导入到Django项目中的Python文件中?

9 浏览
0 Comments

如何将模型导入到Django项目中的Python文件中?

我在我的Django应用程序文件夹中有models.pytest.py文件。

我的项目名为strava,应用名为explorer_api

如何在'test.py`中导入模型?

我尝试了以下方法:

from strava.explorer_api.models import Activity
from explorer_api.models import Activity
from .models import Activity
from models import Activity

但是出现了以下错误:

SystemError: 未加载父模块'',无法执行相对导入

目录结构:

/
    admin.py
    apps.py
    collector.py
    models.py
    serializers.py
    test.py
    tests.py
    urls.py
    views.py
    __init__.py
migrations/
    0001_initial.py
    __init__.py
    __pycache__/
        0001_initial.cpython-35.pyc
        __init__.cpython-35.pyc
templates/
    explorer_api/
        index.html
        save.html
__pycache__/
    admin.cpython-35.pyc
    collector.cpython-35.pyc
    models.cpython-35.pyc
    serializers.cpython-35.pyc
    urls.cpython-35.pyc
    views.cpython-35.pyc
    __init__.cpython-35.pyc

0
0 Comments

在Django项目中,有时候需要在Python文件中导入一个模型(model),但是由于项目结构或版本的不同,可能会导致导入模型的过程出现问题。下面我们来看一下这个问题的出现原因以及解决方法。

原因:

在上面提到的链接中,问如何在不使用manage.py shell的情况下,从一个Python文件中导入项目中的模型。这个问题的出现原因是,当我们在一个独立的Python文件中导入模型时,需要正确设置项目的环境变量和导入路径,以确保能够正确地导入到模型。

解决方法:

根据不同的Django版本和项目结构,有两种解决方法。以下是这两种方法的具体代码示例:

1. Django版本大于等于1.9-1.10

import sys, os, django    
sys.path.append('full_path_to_strava_directory')
os.environ['DJANGO_SETTINGS_MODULE'] = 'strava.settings'
django.setup()
from strava.activity.models import Activity

2. Django版本小于1.11

from strava.wsgi import application
from strava.activity.models import Activity

值得注意的是,这里建议使用os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'strava.settings'),以确保环境变量DJANGO_SETTINGS_MODULE不会被覆盖,如果它已经存在的话。

通过以上的解决方法,我们可以在一个Python文件中成功导入项目中的模型,以便在文件中使用模型的相关功能。

0
0 Comments

问题出现的原因是没有将explorer_api添加到INSTALLED_APPS中,并且在tests.py中导入了多个模型。

解决方法是将explorer_api添加到INSTALLED_APPS中,并只在tests.py中导入一个模型Activity

0