QuerySet: LEFT JOIN with AND

Я использую старую версию Django 1.1 с хаком, который поддерживает присоединение в extra (). Это работает, но сейчас пора перемен. Django 1.2 использует RawQuerySet, поэтому я переписал свой код для этого решения. Проблема в том, что RawQuery не поддерживает фильтры и т. Д., Которых у меня много в коде. Покопавшись в Google, на CaktusGroup я обнаружил, что могу использовать query.join (). Было бы здорово, но в моем коде:

LEFT OUTER JOIN "core_rating" ON 
("core_film"."parent_id" = "core_rating"."parent_id" 
AND "core_rating"."user_id" = %i

В query.join () я написал первую часть "core_film". "Parent_id" = "core_rating". "Parent_id" , но я не Не знаю, как добавить вторую часть после И.
Существует ли какое-либо решение для Django, в котором я мог бы использовать собственные JOIN без перезаписи всего кода фильтров (Raw)?

Это наш текущий фрагмент кода в extra ()

top_films = top_films.extra(  
    select=dict(guess_rating='core_rating.guess_rating_alg1'),  
    join=['LEFT OUTER JOIN "core_rating" ON ("core_film"."parent_id" = "core_rating"."parent_id" and "core_rating"."user_id" = %i)' % user_id] + extra_join,  
    where=['core_film.parent_id in (select parent_id from core_film EXCEPT select film_id from filmbasket_basketitem where "wishlist" IS NOT NULL and user_id=%i)' % user_id,   
           '( ("core_rating"."type"=1 AND "core_rating"."rating" IS NULL) OR "core_rating"."user_id" IS NULL)',  
           ' "core_rating"."last_displayed" IS NULL'],  
     )

7
задан michuk 30 April 2011 в 16:46
поделиться