Django:按集合替换组的Queryset?

时间:2014-07-01 10:42:29

标签: sql database django sqlite django-queryset

我的表结构:

id | file_id(foreign key) | version_id(foreign key) | function_id(foreign key)

id和(file_id,version_id,function_id)是唯一的。

我正在寻找可以模拟以下sql查询的Django查询集:

select *, max(version_id) from change_metrics group by function_id order by version_id

基本上我需要为所有独特的文件功能组合获得最新版本,因为可能存在许多版本的特定文件 - 功能组合。我目前正在使用原始SQL查询,我想用查询集替换它们。

我无法更改数据库结构,但我可以使用各种sql查询或解决此问题的方法

2 个答案:

答案 0 :(得分:1)

假设您的模型如下所示:

class Function(models.Model):
    pass

class File(models.Model):
    pass

class Version(models.Model):
    pass

class ChangeMetric(models.Model):
    function = models.ForeignKey(Function)
    file = models.ForeignKey(File)
    version = models.ForeignKey(Version)

您应该能够执行以下操作:

from django.db.models import Max
Function.objects.all().annotate(max_version=Max('changemetric_set__version___id'))

答案 1 :(得分:0)

您可以使用:

来自django.db.models导入Max  q = change_metrics.objects.annotate(Max('version_id'))。order_by('version_id')