加入收藏 | 设为首页 | 会员中心 | 我要投稿 51站长网 (https://www.51zhanzhang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
站内搜索:
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – Django ORM – 获取组的最新记录

发布时间:2021-01-20 18:10:17 所属栏目:MsSql教程 来源:网络整理
导读:想象一下,我们有Django ORM模型Meetup,其定义如下: class Meetup(models.Model): language = models.CharField() date = models.DateField(auto_now=True) 我想为每种语言取一个最新的聚会. 看起来你可以使用Django Aggregates来简化这种查找: Meetup.objec

想象一下,我们有Django ORM模型Meetup,其定义如下:

class Meetup(models.Model):
    language = models.CharField()
    date = models.DateField(auto_now=True)

我想为每种语言取一个最新的聚会.

看起来你可以使用Django Aggregates来简化这种查找:

Meetup.objects.annotate(latest_date=Max("date")).values("language","latest_date")

在我看来,这应该取得每种语言的“最新”聚会.但事实并非如此:

>>> Meetup.objects.create(language='python')
<Meetup: Meetup object>
>>> Meetup.objects.create(language='python')
<Meetup: Meetup object>
>>> Meetup.objects.create(language='node')
<Meetup: Meetup object>
>>> Meetup.objects.create(language='node')
<Meetup: Meetup object>
>>> Meetup.objects.annotate(latest_date=Max("date")).values("language","latest_date").count()
4

我期望得到两个最新的Python和Node聚会!

如何构建一个只能获取每种语言的最新聚会的查询?

PS.我使用MySQL作为我的后端.

解决方法

将您的values子句放在注释之前.

从aggregation docs:

If the values() clause precedes the annotate(),the annotation will be computed using the grouping described by the values() clause.

However,if the annotate() clause precedes the values() clause,the annotations will be generated over the entire query set. In this case,the values() clause only constrains the fields that are generated on output.

所以这应该这样做:

Meetup.objects.values('language').annotate(latest_date=Max('date'))

(编辑:ASP站长)

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

    相关内容
    未处理完善
      无相关信息
    未处理完善