如何一次获得最新的许多团体

luq*_*qui 8 django django-queryset

我有这样的模型:

class Foo(models.Model):
    date = models.DateTimeField()
    language = models.TextField()
    # other stuff
Run Code Online (Sandbox Code Playgroud)

我想Foo用语言对s 进行分组,然后在每组中获得最新的一个.我无法弄清楚如何使用django的QuerySetAPI来执行此操作(老实说,我不知道如何在SQL中执行此操作).例如:

pk | date   |    language
---+--------+------------------
1  | 1:00   |    python
2  | 1:30   |    python/django
3  | 1:45   |    haskell
4  | 2:15   |    python
5  | 2:45   |    haskell
Run Code Online (Sandbox Code Playgroud)

我想得到类似这个结果的东西:

{ 'python': 4, 'python/django': 2, 'haskell': 5 }
Run Code Online (Sandbox Code Playgroud)

也许代替数字的那些是完整的Foo对象.

Ago*_*ych 0

尝试这个:

Foo.objects.values('语言').annotate(max_date=Max('date')).order_by()

或者您实际上需要具有最大日期的记录 ID 吗?

您可能想阅读以下内容:http ://docs.djangoproject.com/en/dev/topics/db/aggregation/

  • 查询本身非常简单: SELECT `id`, max(`date`), `language` FROM foo group by `language` order by `language`; (4认同)