在django模型中调用自定义函数

时间:2012-02-21 17:44:25

标签: django django-models

我在另一个文件中有一个生成(变量)函数,我想在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管理菜单的一部分。

如果有人可以查看它,看看问题是什么,或者解决了什么问题。

//优素福

2 个答案:

答案 0 :(得分:2)

如果没有看到您的项目结构,很难确切地说导入失败的原因。但是,大多数情况下,应用程序的“fixtures”目录只包含JSON / XML /任何文件,因此不被视为模块(通过内置__init__.py文件)。

如果该目录中没有__init__.py文件,则该目录不是python模块,因此无法导入。最简单的解决方案是显然只是添加这个文件(它可以是空的;它只需要存在)。但是,由于我上面所说的,将python代码放在​​目录名称“fixtures”中是个坏主意。它违反了目录名称最常用的惯例,因此成为其他开发人员的混淆点。

答案 1 :(得分:0)

看起来你在Cricket.models和Cricket.fixtures之间有一个循环导入。您需要将常用定义移到第三个模块中以打破循环。