Django自定义Model方法抛出属性错误

时间:2013-03-27 18:41:59

标签: django django-models

我真的希望我不必为此而诉诸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')

1 个答案:

答案 0 :(得分: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才能获得完整功能,所以最好知道。