私はvalues()とannotate()がどのように機能するかを理解しようとしています。
私のアプリにはモデルがあります
class MyEntry(models.Model):
entrydate = models.DateField(default=date.today)
...
Pythonシェルで次のことを行うと
>>allentries = MyEntry.objects.all()
>>vals = allentries.values('entrydate')
>>vals[:2]
[{ 'entrydate':datetime.date(2013,2,24)},
{ 'entrydate':datetime.date(2013,2,8)}]
次に、注釈を適用すると
>>valsannot = vals.annotate(dailycount=Count('entrydate'))
>>valsannot[:2]
[{ 'entrydate':datetime.date(2013,2,24),'dailycount':1},
{ 'entrydate':datetime.date(2013,2,8)},'dailycount':2]
これを逆の順序で試してみると
>>allentries = MyEntry.objects.all()
>> annot = allentries.annotate(dailycount=Count('entrydate'))
>>annot[:2]
[ <MyEntry ..2013-2-21>,
<MyEntry ..2013-2-14> ]
>>annot[0].dailycount
1 #even tho there are many entries on that date
>>annot[1].dailycount
1 #even tho there are many entries on that date
次にvalues()を適用します
>>annotvals = annot.values('entrydate')
>>annotvals[:2]
[{'today': datetime.date(2013, 2, 21)},
{'today': datetime.date(2013, 2, 14)}]
私はこれらに明確に従うかどうかわかりません..誰かが逆が最初として機能しない理由を説明できますか?