虽然有关于这个问题的讨论,但我找不到解决问题的方法。
我在项目中有一些应用程序。在应用程序A的模型中,即“测试”,我有一个表“系统”和一个表“详细信息”。在应用程序B的视图中,即“task1b”,我想对此模型进行查询并在模板中显示结果。 导入Test.models后,我可以在“Detail”模型中进行查询,但不能在“system”中进行查询。 特别是:
#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))
如果我把Detail替换为“system”,那么我没有错误。 使用这个模型我过去没有问题。 试图查询任何其他模型而不是“系统”。你认为这是名字问题吗?接受任何想法。
答案 0 :(得分:3)
正如yedpodtrzitko的评论中所述,我认为import *
是你所看到的问题的根源。从Test.models导入所有内容时,会导入导入的所有内容,这会产生意外结果。
以下内容可以作为使用显式导入的一些帮助: pep8 import docs
在上面的代码中使用显式导入看起来像:
from Test.models import system
systems = system.objects.all
但是,似乎'system'这个名称与这里显示的Python标准库os包中的系统函数调用相冲突:
python os.system documentation
对于python类名使用CapWords约定是常规的,因此使用'System'作为Django模型的名称可能是合适的,而不是'system',除非上面的代码包含拼写错误,模型已经声明为class System(...
。
换句话说,'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))