django使用外键对多个表进行分组查询

时间:2016-01-10 21:56:20

标签: django

我很难找到在django中执行多个组的查询: 这是我的模特:

class Profile(models.Model):
    name = models.charField(max_length=15)

class Release(models.Model):
    date = models.DateField(auto_now_add=True)

class Analysis(models.Model):
    date = models.DateField(auto_now_add=True)
    profile = models.ForeignKey(Profile)
    release = models.ForeignKey(Release, null=True, blank=True, default=None)

我想要做的是获取配置文件1和2的所有分析,其中包含该配置文件的最新版本。 例如:

profile id | analysis_id   | release_id
    1      |     1         |   1
    1      |     2         |   1
    1      |    *3*        |   2
    1      |    *4*        |   2
    2      |    *5*        |   1
    2      |    *6*        |   1

请注意,我不仅仅是在最大的发布ID之后,而是该配置文件的最大版本ID。

我想得到分析ID 3,4,5,6。 这是我的尝试,它没有给我我想要的东西:

print Analysis.objects.filter(profile__id__in=[1, 2]).annotate(rid=Max('release__id')).values_list('id', flat=True)

返回所有ID。 任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:1)

注释后

Use a reference filter引用回最大值。

from django.db.models import F
print Analysis.objects.filter(profile__id__in=[1, 2]
   ).annotate(rid=Max('release__id')
   ).filter(release__id=F('rid') 
   ).values_list('id', flat=True)

注意,我之前使用过这些效果很好,但我还没有用你的模型 * 对它进行全面测试。

*您的millage可能会有所不同。如果数据库查询持续时间超过4小时,请咨询医生。