0

日付フィールドを持つ Article モデルがあります。すべての Article オブジェクトに対してクエリを実行し、データ型を年ごとに返してから、その中の月ごとに返したいと考えています。

例えば

archives = { 2009: {12, [, , ...], 11: [...]}, 2008: {12, [...], 11: [...]}, }

これは可能ですか?

4

2 に答える 2

4

この種の質問はかなり頻繁に出てくるようです。最も簡単な解決策は、データをループしてオブジェクトを年と月ごとにグループ化することです。これは、ビューで手動で行うか、テンプレートでregroupを使用して行うことができます。それは本当にあなたがデータで何をしたいかによって異なります。

アプリケーションでアーカイブを年と月でグループ化することが非常に一般的である場合は、save() で入力する年と月のフィールドを作成することを検討してください。

手動では、次のようになります。

arch = {}
for a in Archive.objects.all():
    year = arch.get(a.pub_date.year, {})
    month = year.get(a.pub_date.month, [])
    month.append(a)
    year[a.pub_date.month] = month
    arch[a.pub_date.year] = year

または、再グループ化(未テスト)を使用して、すべてのグループ化ロジックをテンプレートにプッシュします。

{% regroup archives by pub_date.year as year_list %}
{% for year in year_list %}
  Year: {{ year.grouper }}
  {% regroup year.list by pub_date.month as month_list %}
  {% for month in month_list %}
    Month: {{ month.grouper }}
    {% for archive in month.list %}
      {{ archive }}
    {% endfor %}
  {% endfor %}
{% endfor %}

個人的には、テンプレートではなくビューにロジックを配置しようとします。

関連する投稿をいくつか紹介します。

于 2010-02-02T01:52:22.293 に答える
0

迅速な解決策はありませんが、dates()メソッドを確認できます。

于 2010-02-02T00:46:06.517 に答える