导入Django的模型类Python

2024-06-16 09:23:07 发布

您现在位置:Python中文网/ 问答频道 /正文

在问这个问题之前,我已经在stackoverflow中查看了类似的问题,但是没有一个能帮助我解决这个问题。你知道吗

我有一个Django项目叫做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已作为INSTALLED_APPS添加到testrun/settings.py):

-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中的类,因为我在解析表示models.py中类的.json文件时需要它们:

from graphs.models import *

class Parser:
   def __init__(self, filename=''): 
       self.api_test = APITest()

APITestmodels.py中的一个类:

import datetime
from django.db import models

class APITest(models.Model):
    #... def goes here

当我执行graphs\parser.py时,我得到:

$ python parser.py
Traceback (most recent call last):
  File "parser.py", line 8, in <module>
    from graphs.models import *
ImportError: No module named graphs.models 

有人能解释一下为什么不起作用吗?你知道吗


Tags: frompyimportparsermodelsusersdecmodule
2条回答

试试看

python manage.py shell

from graphs.models import *

并添加 从.models导入APITest

至分析器.py然后跑 python管理.py贝壳

from graphs.parser import Parser

为了管理Django中的依赖关系,最好使用pythonvirtualenv。你知道吗

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

如果你想要我的剧本_分析器.py您可以将它放在graphs/management/commands/folder中,并将其作为python-manage-my-u解析器运行。你知道吗

我的\u解析器的代码如下所示

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

第一个不起作用,因为你有:

from testrun.graphs.models import *

但应该是:

from graphs.models import *

因为pythonpath已经指向testrun项目目录。第一次导入将查看testrun/testrun/目录,我猜这不是您想要的。你知道吗

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

相关问题 更多 >