0

如何在 Django 的两个不同目录中拥有模型声明?

我在包含“ init .py”、“models.py”和“admin.py”的目录代码中有模型。它单独工作正常。

我想要目录历史,其中包含给定问题的修订模型。我在目录中有类似的文件。

我需要告诉 Django 以某种方式使用目录“History”中的模型,因为我在表 Questions 中与另一个目录有 ManyToMany 关系。

我收到以下导入错误

ImportError at /

cannot import name history

Request Method:     GET
Request URL:    http://127.0.0.1:8000/
Exception Type:     ImportError
Exception Value:    

cannot import name history

Exception Location:     /home/noa/build/CML/../CML/codes/models.py in <module>, line 2
Python Executable:  /usr/bin/python
Python Version:     2.6.2
Python Path:    ['/home/noa/build/CML', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/var/lib/python-support/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/var/lib/python-support/python2.6/gtk-2.0', '/var/lib/python-support/python2.6/pyinotify', '/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode', '/usr/local/lib/python2.6/dist-packages']
Server time:    Fri, 11 Dec 2009 15:46:30 -0600
4

3 回答 3

2

Since it sounds like both of your directories are Django apps, and assuming you've put both of them in your INSTALLED_APPS list in settings.py you can refer to them using a string without having to import:

# in code/models.py

class Questions(models.Model):
    histories = models.ManyToManyField('history.MyHistoryModel')

Note that the path is case sensitive... so if you app is truly called 'History' you will need to reference it using 'History.MyHistoryModel'.

于 2009-12-11T22:11:22.113 回答
0

通常人们只有一个“模型”目录,有时甚至只有一个模型文件。如果您觉得您的模型需要 2 个完整目录,那么最好开始考虑将您的一个应用程序拆分为几个小应用程序,而不是一般情况下。话虽这么说,但我们看不到您的设置可能存在许多问题。

不过,每当我遇到导入错误时,我都会转到 python shell 并尝试导入该项目。如果它失败了,那么要么是模块出了问题(你会惊讶于我忘记 __init__.py 的频率),或者它不在你的 python 路径中。

于 2009-12-11T22:10:40.753 回答
0

如果目录名为 History,则应更改import historyimport History,因为 python 导入区分大小写(至少在我的 Linux 机器上)。

于 2009-12-11T22:11:14.483 回答