导入Django的模型类 - Python

时间:2013-12-23 09:07:00

标签: python django

在提出这个问题之前,我已经在stackoverflow中查看了类似的问题,但没有一个能帮我解决问题。

我有一个名为Django的{​​{1}}项目。

testrun

我在-rw-r--r-- 1 pribeiro Users 196608 Dec 5 21:38 db.sqlite3 drwxr-xr-x 20 pribeiro Users 680 Dec 19 16:14 graphs -rw-r--r-- 1 pribeiro Users 250 Dec 4 20:11 manage.py drwxr-xr-x 8 pribeiro Users 272 Dec 12 21:57 parser drwxr-xr-x 10 pribeiro Users 340 Dec 23 09:56 testrun 内有一个名为graphs的应用(testrun已作为graphs添加到testrun/settings.py):

INSTALLED_APPS

我尝试运行-rw-r--r-- 1 pribeiro Users 0 Dec 4 23:05 __init__.py -rw-r--r-- 1 pribeiro Users 739 Dec 5 21:45 admin.py drwxr-xr-x 7 pribeiro Users 238 Dec 19 09:07 migrations -rw-r--r-- 1 pribeiro Users 3945 Dec 19 09:07 models.py -rw-r--r-- 1 pribeiro Users 5057 Dec 19 16:14 parser.py drwxr-xr-x 2 pribeiro Users 68 Dec 12 18:33 static drwxr-xr-x 3 pribeiro Users 102 Dec 5 22:31 staticfiles drwxr-xr-x 3 pribeiro Users 102 Dec 5 22:32 templates -rw-r--r-- 1 pribeiro Users 343 Dec 19 15:22 test_parser.py -rw-r--r-- 1 pribeiro Users 60 Dec 4 23:05 tests.py -rw-r--r-- 1 pribeiro Users 149 Dec 12 18:22 urls.py -rw-r--r-- 1 pribeiro Users 287 Dec 12 18:29 views.py 然后:

python manage.py shell

因此,在>>> from testrun.graphs.models import * Traceback (most recent call last): File "<console>", line 1, in <module> ImportError: No module named graphs.models 中,我尝试导入graphs\parser.py中的分类,因为当我解析代表models.py中的类的.json文件时,我将需要它们:

models.py

from graphs.models import * class Parser: def __init__(self, filename=''): self.api_test = APITest() APITest中的一个类:

models.py

当我执行import datetime from django.db import models class APITest(models.Model): #... def goes here 时,我得到:

graphs\parser.py

有人可以解释为什么它不起作用?

2 个答案:

答案 0 :(得分:1)

尝试

python manage.py shell

from graphs.models import *

并添加     来自.models导入APITest

到parser.py并运行     python manage.py shell

from graphs.parser import Parser

为了管理Django中的依赖项,最好使用python virtualenv。

如果您只想从命令行从Django运行某些逻辑,请尝试使用编写自定义django-admin命令。 https://docs.djangoproject.com/en/dev/howto/custom-management-commands/

在您的情况下,如果您想要一个脚本my_parser.py,您可以将它放在graphs / management / commands /文件夹中,然后您可以将其作为python管理my_parser来运行。

my_parser的代码看起来像这样

from django.core.management.base import BaseCommand, CommandError
from .models import APITest

class Command(BaseCommand):
    args = '<arg1 arg2...>'
    help = 'Help line ...'

    def handle(self, *args, **options):
        ... # You code comes here

答案 1 :(得分:0)

第一个不起作用,因为你这样做:

from testrun.graphs.models import *

但它应该是:

from graphs.models import *

因为你的pythonpath已经指向testrun项目目录。第一个导入将在testrun/testrun/目录中查找,我猜这不是你想要的。

第二个不起作用,因为我假设您从graphs目录执行该文件。如果从那里执行文件,则导入将不起作用,因为导入假定python路径指向testrun项目根目录。