私のジャンゴアプリでは、エントリにはこのモデルがあります
from models import PENDING,CLOSED
class Entry(models.Model):
...
name = models.CharField(max_length=200)
status = models.CharField(max_length = 4,choices=status_values ,default = PENDING)
creation_date = models.DateTimeField(default=datetime.datetime.now)
closed_date = models.DateTimeField(null=True)
Entry
ステータスがあるすべての と、CLOSED
クローズするのに 4 日以上かかったものをすべて見つける必要があります。モデルで期間と呼ばれるフィールドを使用していませんが、以下のようにclosed_date
との差を計算したいと考えていました。creation_date
(closed_date-creation_date).days
クエリを次のように記述しようとしました
entries = Entry.objects.filter((closed_date-creation_date).days > 4 )
ジャンゴシェルでこれを試しました
In [9]:Entry.objects.filter((closed_date - creation_date).days > 4)
これにより、次が生成されますNameError
。
NameError: 名前 'closed_date' が定義されていません
しかし、Entry を取得して、closed_date フィールドにアクセスしようとすると、
In [9]: entry1 = Entry.objects.get(name='myentry')
In [10]: entry1.closed_date
Out[10]: datetime.datetime(2013, 4, 3, 14, 2, 4, 442518)
In [11]: entry1.creation_date
Out[11]: datetime.datetime(2013, 3, 17, 0, 0)
ここで何が間違っているのかわかりませんでした..クエリが間違っていますか?
また、これを試すと、構文エラーが発生します。
In [12]: Task.objects.filter(status='CLOSED',(closed_date - creation_date).days > 4)
SyntaxError: non-keyword arg after keyword arg (<ipython console>, line 1)