Django фильтр, если истинно только последнее значение в запросе

Как отфильтровать все объекты ViewModel, если только последний InfoModel.check_by_client_a является True?

У меня структура выглядит следующим образом:

class InfoModel(model.Models):
    ...
    service = ForeingKey(ServiceModel)
    check_by_client_a = BooleanField()
    check_by_client_b = BooleanField()
    check_date = DateTimeFiled()
    ...

class ServiceModel(model.Models):
    ...

class ViewModel(model.Models):
    ...
    service = ForeingKey(ServiceModel)
    ...

# get last InfoModel
last_info_model = InfoModel.objects.filter(check_by_client_a=True).last()
if last_info_model:
    # filter all ViewModel for the service
    ViewModel.objects.filter(service_id=last_info_model.service_id)

Используя выражение подзапроса, вы можете аннотировать на ViewModel значение последнего InfoModel.check_by_client
. после этого вы можете фильтровать по этому "новому полю", если оно истинно

ViewModel.objects.annotate(last_info_checked=Subquery(
            InfoModel.objects.filter(service=OuterRef('service'))
                             .order_by('-check_date')
                             .values('check_by_client_a')[:1])
                 .filter(last_info_checked=True)

смотрите больше на: https://docs.djangoproject.com/en/4.0/ref/models/expressions/

Вернуться на верх