LEFT JOIN на двух кверисетах Django

Я уже два дня ищу в SO и Google и не нашел решения своей конкретной проблемы. У меня есть SQL запрос, который я пытаюсь преобразовать в Django ORM (если это вообще возможно). В SQL запрос выглядит примерно так:

SELECT *
FROM(
SELECT
    max(effective_date) AS effective_date,
    floorplan_id
FROM
    floorplan_counts
GROUP BY
    floorplan_id) s1
LEFT JOIN (
        SELECT
            floorplan_id AS fc_floorplan_id,
            units AS fc_units,
            beds AS fc_beds,
            expirations AS fc_expirations,
            effective_date
        FROM
            floorplan_counts) s2 ON s1.floorplan_id = s2.fc_floorplan_id
)

Я могу использовать Django ORM для создания подзапросов s1 и s2:

s1 = FloorplanCount.objects.values('floorplan_id').annotate(effective_date=Max('effective_date')
s2 = FloorplanCount.objects.values('effective_date').annotate(
            fc_floorplan_id=F('floorplan_id'), fc_units=F('units'), fc_beds=F('beds'), fc_expirations=F('expirations'))

В настоящее время я использую Django .raw(), но хотел бы использовать Django ORM. Также хотелось бы не использовать .extra(), поскольку в документации сказано, что в будущем она будет устаревшей.

Как я могу левым способом присоединить s1 к s2?

Я не знаю вашу модель, но я не понимаю, зачем вам нужен второй select:

queryset = FloorplanCount.objects.annotate(
    effective_date=Max('effective_date'),
    fc_floorplan_id=F('floorplan_id'), 
    fc_units=F('units'), 
    fc_beds=F('beds'),
    fc_expirations=F('expirations')
)
Вернуться на верх