首页 > 解决方案 > Django在分组后获取模型所有字段

问题描述

我有一个模型;

class Location(models.Model):

    g_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name="guard_id")
    corX = models.IntegerField()
    corY = models.IntegerField()
    date = models.DateTimeField()

    def __int__(self):
        return self.map_id

我想使用此查询获取每个外键的最新记录;

query = Location.objects.values('g_id').annotate(timestamp=Max('date'))

这是我的查询结果。

<QuerySet [{'g_id': 1, 'timestamp': datetime.datetime(2021, 3, 29, 8, 57, tzinfo=<UTC>)}, {'g_id': 2, 'timestamp': datetime.datetime(2021, 3, 29, 8, 55, 50, tzinfo=<UTC>)}]>

如何通过分组数据获取 corX、corY 值?

标签: djangodjango-models

解决方案


您可以在订购时在字段上使用distinct[Django docs] ,以获取每个条目的最大值:g_id-dateg_iddate

query = Location.objects.order_by('g_id', '-date').distinct('g_id')

注意:这仅适用于PostgreSQL ,因为您可以在 distinct 调用中为PostgreSQL指定字段。


推荐阅读