这是示例模型的样子
models.py
class Foo(models.Model):
name = models.CharField(max_length=16)
class Bar(models.Model):
foo = models.ForeignKey(Foo, related_name="get_bars")
name = models.CharField(max_length=16)
timestamp = models.DateTimeField(auto_now_add=True)
样本数据
hello_foo
hello_bar
目标:
在最后连接的foos
记录中查找按timestamp
排序的所有bar
。 (foo
以一对多关系连接到bar
)
我尝试过的事情
我知道如何根据foo
过滤bar
foos = hello.models.Foo.objects.filter(get_bars__name="foo1-bar1")
我还可以根据foo
的名字订购bar
foos = hello.models.Foo.objects.order_by("-get_bars__name")
但是我该如何使用它对foo的最后一个条记录执行排序?
示例纯SQL,我会这样写:
select foo.name, bar.last_ts
from hello_foo as foo
inner join
(select foo_id, max(timestamp) as last_ts from hello_bar group by foo_id) as bar
on foo.id = bar.foo_id
order by bar.last_ts desc
我正在使用Django 1.11和python3
答案 0 :(得分:2)
您可以使用查询集和顺序对timestamp
的{{3}}进行注释。
因此,尝试这样:
from django.db.models import Max
Foo.objects.annotate(max_t = Max('get_bars__timestamp')).order_by('max_t')