我的表结构:
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查询或解决这个问题的方法
假设您的模型如下所示:
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'))
您可以使用:
from django.db.modelsq = change_metrics.objects.annotate(Max('version_id')).order_by('version_id')