我真的希望我不必为此而诉诸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')
答案 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
才能获得完整功能,所以最好知道。