Вот так выглядит пример модели
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_foo](https://i.stack.imgur.com/PhVYJ.png)
hello_bar
![hello_bar](https://i.stack.imgur.com/fx4rD.png)
Цель :
Найти все foos
, отсортированные по timestamp
в последней подключенной записи bar
.(foo
подключен к bar
с отношением один ко многим)
То, что я пытался
Я знаю, как фильтровать foo
на основе bar
foos = hello.models.Foo.objects.filter(get_bars__name="foo1-bar1")
Я также могу заказать foo
на основе bar
name
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