Django查询对象的最新版本

时间:2019-03-19 00:55:03

标签: python mysql django python-3.x

我正在尝试在Django中编写查询,但是我不确定什么是编写此查询的最佳方法。还假设数据库是mySQL。如果使用了distinct,这很重要。

  class Homework(models.Model):
    title = TextField()


  class Assignment(models.Model):
      homework_id = Foreignkey(Homework, on_delete=models.CASCADE)
      task = IntegerField(default=1)
      version = IntegerField(default=1)

鉴于上述模型,我想获取特定作业中的所有作业,其中作业是任务的最新版本。 例如:

Homework_id: 1
    assignment v1, t1
    assignment v2, t1
    assignment v1, t2

如果我有一个作业对象,其中有任务1和任务2的分配,则结果查询应返回Assignment t1, v2 and Assignment t2, v1

v refers to version
t refers to task

1 个答案:

答案 0 :(得分:4)

您可以尝试使用最大版本号注释任务,如下所示:

Assignment.objects.filter(homework_id=1).values('task').annotate(version=Max('version'))

这会让您得到类似的东西

<QuerySet [{'task': 1, 'version': 2}, {'task': 2, 'version': 1}]>