2

この単純なデータ セットを作成して、要点を説明しました。これは、他のモデルとの関係がない単純なモデルです。

ここに画像の説明を入力

上記のデータを topicid でグループ化し、各グループの最大日付を見つけて、その日付の著者を取得する必要があります。

info = TempModel.objects
       .values('topic')
       .annotate( max=Max('date'))
       .order_by('-max')

テンプレートでこれを繰り返すと、

  <table>
      {% for item in info %}
      <tr>
        <td>{{ item.topicid }}</td>
        <td>{{ item.max }}</td>
        <td>{{ item.author }}</td>
      </tr>
      {% endfor %}
  </table>

生産し、

ここに画像の説明を入力

各最大日付の「作成者」列を表示するにはどうすればよいですか?

このような生のSQLクエリでこれを行うことができます。

info = list(TempModel.objects
       .raw('SELECT *, max(date) AS max 
       FROM crudapp_tempmodel 
       GROUP BY topicid 
       ORDER BY date DESC'))

しかし、Django クエリを使用して実行したいと考えています。

私が探している出力は、

ここに画像の説明を入力

これが Django クエリで不可能な場合は、知りたいです。

ありがとう、

4

1 に答える 1

0

解決策は、あるクエリの日付を別のクエリの最大値と比較する別のクエリを統合することです。

これを行うビューは次のとおりです。

def temp(request):
    info2 = TempModel.objects.all()
    info = TempModel.objects
           .values('topic')
           .annotate( max=Max('date'))
           .order_by('-max')

    columnlist = []
    for item in info2:
         columnlist.append([item])

    for item in info:
        for i in range(len(columnlist)):
            if item['max'] == columnlist[i][0].date:
                item['author'] = columnlist[i][0].author

    return render(request, 'template.html', {'info': info, 'info2': info2})
于 2016-06-19T21:18:51.660 に答える