2012-02-09 5 views
0

ブログエントリのQuerySetの場合、これらの投稿が作成された月のDateQuerySetを作成します。クエリは次のとおりです。Queryset ".dates(...)"は、datetimeオブジェクトの別個のDateTimeQuerysetを返します。

dates = Entry.published.all().dates('pub_date', 'month') 

According to the docs

「月」フィールドの年/月の値のリストを返します。

私は日付の4つのエントリがある場合:

  • (2012年、2月3日、)
  • (2012年、2月、第2回)
  • (2012年、月、第24回)
  • を(2011年12月28日)

返されるdatetimeオブジェクトは3つあります。 DecJanFebの代わりに、元の日付ごとに1つずつ返されます。

この動作は期待されていますか?私はdistinct()をクエリに追加しようとしましたが、それでもすべての日付が返されます。


UPDATE

この問題を解決する簡単な方法は、DateQuerySetからSetを作るです:

dates = Entry.published.all().dates('pub_date', 'month') 
return set(dates) 

これは、重複にdatetimeオブジェクトが削除されますが、なぜこの私はまだ理解していません(または、私が日付()の動作を誤解している場合)

+0

私は興味がありますが、date = Entry.published.dates( 'pub_date'、 'month')の返品は何ですか? – akonsu

+0

これは基本的に 'datetime'オブジェクトのリストである' DateQuerySet'を返します。 –

+0

でない同じ月に発生したかどうかにかかわらず、元のクエリーセットのすべてのエントリに対して1を返します。これは、all()コールのバージョンと同じように重複した日付を返しますか? – akonsu

答えて

1

Y私たちの症状は、注文のあるGROUP BYのようなものです。

print query.queryには、SELECTに追加されるフィールドに順序が適用されているかどうかを確認することができます。

​​
+0

おっと、この質問を忘れました。私のハックはそれを修正しました。私はまもなくこれをチェックします –

関連する問題