【问题标题】:Get related column on .annotate() data Django获取有关 .annotate() 数据 Django 的相关列
【发布时间】:2016-10-20 20:30:58
【问题描述】:

我创建了这个简单的数据集来说明我的观点。这是一个简单的模型,与任何其他模型没有进一步的关系。

我需要将上面的数据按 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 查询无法做到这一点,我想知道。

谢谢,

【问题讨论】:

    标签: django django-select-related rawsql


    【解决方案1】:

    一种解决方案是合并另一个查询,该查询将一个查询的日期与另一个查询的最大值进行比较。

    这是执行此操作的视图,

    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})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-19
      • 2021-04-21
      • 2012-07-03
      • 2011-04-23
      • 2017-01-27
      • 2018-09-19
      • 1970-01-01
      • 2019-01-15
      相关资源
      最近更新 更多