我很难找到在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。 任何想法如何做到这一点?
答案 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小时,请咨询医生。