1

虽然有关于这个问题的讨论,但我找不到我的问题的解决方案。

我在一个项目中有一些应用程序。在应用程序 A 的模型中,即“测试”,我有一个表“系统”和一个表“详细信息”。在应用程序 B 的视图中,即“task1b”,我想对此模型进行查询并在模板中显示结果。导入 Test.models 后,我可以在“详细”模型中进行查询,但不能在“系统”中进行查询。尤其:

#Application: task1b, views.py
from Test.models import *
def task1ba(request):
    systems=system.objects.all()
    return render_to_response("Task1B-A.html", {"systems":systems}, RequestContext(request)) 

如果我把细节而不是“系统”,那么我没有错误。使用这个模型我过去没有问题。尝试查询任何其他模型而不是“系统”。你觉得是名字的问题吗?接受任何想法。

4

1 回答 1

3

正如 yedpodtrzitko 的评论中所述,我认为这import *是您所看到问题的根源。从 Test.models 导入所有内容时,会导入它导入的所有内容,这可能会产生意想不到的结果。

以下可以作为使用显式导入的一些帮助: pep8 import docs

在上面的代码中使用显式导入看起来像:

from Test.models import system

systems = system.objects.all

但是,名称“system”似乎与此处显示的 Python 标准库 os 包中的系统函数调用冲突:

python os.system 文档

Python 类名通常使用 CapWords 约定,因此使用“System”作为 Django 模型的名称可能比较合适,而不是“system”,除非上面显示的代码包含拼写错误,并且模型已经声明为class System(....

换句话说,“系统”可能会隐藏内置函数调用,因此如果需要,重命名应该会有所帮助。

修改后的代码将是:

#Application: task1b, views.py
from Test.models import System
def task1ba(request):
    systems=System.objects.all()
    return render_to_response("Task1B-A.html", {"systems":systems}, RequestContext(request))
于 2013-05-30T14:30:39.713 回答