Django也注释返回其他字段

我有一个模特:

class ModelTest(models.Model):
    test_name = models.CharField(max_length=100)
    test_field = models.IntegerField()
    test_date = models.DateTimeField()
    test_make = models.IntegerField()

现在,我想要对同一个test_field具有max test_date的行.

我所做的是ModelTest.objects.values(‘test_field’).annotate(td = Max(‘test_date’)).values(‘test_field’,’test_date’).

现在,我希望我获得所有其他字段值以及所选行.如果我尝试在任何值中添加它们,则注释不起作用.

什么是可能的解决方案?

更新:

测试数据:

test_name | test_field | test_date                     | test_make

test1     | 1          | 2012-01-23 15:24:10.389+05:30 | 3

test2     | 2          | 2012-01-23 15:24:26.747+05:30 | 5

test3     | 3          | 2012-01-23 15:27:19.033+05:30 | 1

test4     | 2          | 2012-01-23 15:29:45.098+05:30 | 4

test5     | 3          | 2012-01-23 15:54:01.322+05:30 | 2

现在,我希望输出为:

test1     | 1          | 2012-01-23 15:24:10.389+05:30 | 3

test4     | 2          | 2012-01-23 15:29:45.098+05:30 | 4

test5     | 3          | 2012-01-23 15:54:01.322+05:30 | 2

最佳答案 你可以使用这样的东西:

[ModelTest.objects.get(test_field=x['test_field'],test_date=x['td'])
     for x in ModelTest.objects.values('test_field').annotate(td=Max('test_date'))
]

由于注释仅返回所需的字段,因此只有一个test_field test_date组合与您的结果相匹配.

Annotate不返回任何对象,只返回作为dicts的匹配列表,因此您必须再次查询对象.

更好的方法是编写自己的自定义查询并将其与extra一起使用

点赞