我在另一个文件中有一个生成(变量)函数,我想在models.py文件中调用它。 这是我的代码。
class Season(models.Model):
Year = models.CharField(max_length=6, default=getyear())
start_date = models.DateField()
end_date = models.DateField()
league = models.ManyToManyField(League)
fixgen = models.BooleanField(default=False)
in_progress = models.BooleanField(default=True)
def __unicode__(self):
return self.Year
def createfixtures(self):
generate(self)
但是当我运行该文件时,它会给我以下错误。
Validating models...
Unhandled exception in thread started by <function inner_run at 0xa05eae4>
Traceback (most recent call last):
File "/usr/lib/pymodules/python2.7/django/core/management/commands/runserver.py", line 48, in inner_run
self.validate(display_num_errors=True)
File "/usr/lib/pymodules/python2.7/django/core/management/base.py", line 249, in validate
num_errors = get_validation_errors(s, app)
File "/usr/lib/pymodules/python2.7/django/core/management/validation.py", line 35, in get_validation_errors
for (app_name, error) in get_app_errors().items():
File "/usr/lib/pymodules/python2.7/django/db/models/loading.py", line 146, in get_app_errors
self._populate()
File "/usr/lib/pymodules/python2.7/django/db/models/loading.py", line 64, in _populate
self.load_app(app_name)
File "/usr/lib/pymodules/python2.7/django/db/models/loading.py", line 78, in load_app
models = import_module('.models', app_name)
File "/usr/lib/pymodules/python2.7/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/home/yousuf/PycharmProjects/CricketManager/../CricketManager/Cricket/models.py", line 4, in <module>
from Cricket.fixtures import generate
File "/home/yousuf/PycharmProjects/CricketManager/Cricket/fixtures.py", line 3, in <module>
from Cricket.models import League, Season, Team, Fixture
File "/home/yousuf/PycharmProjects/CricketManager/Cricket/models.py", line 4, in <module>
from Cricket.fixtures import generate
ImportError: cannot import name generate
如果我从django shell调用它,我可以导入一个正常工作的函数。现在我希望将它作为django管理菜单的一部分。
如果有人可以查看它,看看问题是什么,或者解决了什么问题。
//优素福
答案 0 :(得分:2)
如果没有看到您的项目结构,很难确切地说导入失败的原因。但是,大多数情况下,应用程序的“fixtures”目录只包含JSON / XML /任何文件,因此不被视为模块(通过内置__init__.py
文件)。
如果该目录中没有__init__.py
文件,则该目录不是python模块,因此无法导入。最简单的解决方案是显然只是添加这个文件(它可以是空的;它只需要存在)。但是,由于我上面所说的,将python代码放在目录名称“fixtures”中是个坏主意。它违反了目录名称最常用的惯例,因此成为其他开发人员的混淆点。
答案 1 :(得分:0)
看起来你在Cricket.models和Cricket.fixtures之间有一个循环导入。您需要将常用定义移到第三个模块中以打破循环。