Django фильтрует объекты по значению поля последних данных в другой модели - PullRequest
0 голосов
/ 12 декабря 2018

Есть 2 модели

class A(models.Model): name = models.TextField()

class B(models.Model): a = models.ForeignKey(A) status = models.BooleanField(default=False)

Теперь я хочу отфильтровать объекты класса A по последним данным в статусе класса B.

если есть 2 данных модели B

id | a | status 1 | a | True 2 | abc | False 3 | a | False 4 | abc | True

Так что, если я хочу отфильтровать объекты модели A, которые имеют статус False.В этом случае он выдаст мне

a.

Если бы я хотел отфильтровать объекты модели A, которые имеют статус True.В этом случае он должен вернуть мне abc.

Я хочу написать запрос что-то вроде

A.objects.filter(b__status__last=True)

Можно ли использовать фильтры?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я думаю, что вы могли бы эффективно использовать аннотирование здесь.

A.objects.annotate(latest_b=Max("b__created_at")).filter(b__status=True).latest('latest_b')

Здесь мы аннотируем каждый объект A, чтобы иметь поле latest_by, а затем выбираем последний объект после фильтрации постатус б.Это должно работать правильно.

0 голосов
/ 12 декабря 2018

Пожалуйста, попробуйте:

from django.db.models import Max, F

A.objects.annotate(latest=Max('b__id')).filter(b__id=F('latest'),b__status=True)
...