3

我真的希望我不必为此求助于 SO ,但现在它让我发疯了,所以这里......

# models.py
[...]
from datetime import datetime as dt

class Foo(models.Model):
    [...]
    date_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-date_time']

    def is_fresh(self):
        if (dt.now() - self.date_time).seconds < settings.FOO_LIFESPAN:
            return True
        else:
            return False

    def __unicode__(self):
        return u'%s|%s %s' % ([...], self.date_time)

当我尝试使用is_fresh()我得到的方法时AttributeError: 'Foo' object has no attribute 'is_fresh'

我已经看到其他在 SO 上遇到此问题的人已通过修复缩进来解决它。我相信这里的情况并非如此(著名的遗言)。我在 Eclipse 中工作,没有任何其他与缩进相关的偷偷摸摸的错误......

有什么想法吗?

编辑

我将其用作 Dajaxice/Dajax 函数的一部分。

# ajax.py

def seek_bar(request, name):
    # Other stuff goes here. I know that it works 100%
    foo_list = []
    [...]
    for receipt in receipts:
        foo_list.append((receipt.foos.all()[0], receipt.pk))
        [...]

    # Check freshness
    for (foo, bar) in foo_list:
        if foo.is_fresh():
            dajax.add_css_class('#timer_0%s' % bar, 'fresh')
        else:
            dajax.remove_css_class('#timer_0%s' % bar, 'fresh')
            dajax.add_css_class('#timer_0%s' % bar, 'stale')
4

1 回答 1

0

我想通了,我想踢墙!

问题与我的文件结构以及我如何导入模型有关。我有两个应用程序共享相同的models.py,所以我把它放在一个单独的文件夹中,如下所示:

my_project/
        |
      backend/
            |
          models/
             - __init__.py
             - models.py

在 ajax.py 中,我像这样导入 Foo from my_project.backend.models import Foo, ...,:. 它适用于我需要的一切,直到is_fresh()出现。我刚试过from my_project.backend.models.models import Foo, ...,,你瞧——它奏效了!而且我觉得很傻...

如果有人能告诉我为什么...backend.models除了我的自定义方法之外的所有东西都有效,但我需要...backend.models.models完整的功能,很高兴知道。

于 2013-03-28T11:19:30.847 回答