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 を共有する 2 つのアプリがあるため、次のように別のフォルダーに配置します。

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 に答える