Я использую старую версию Django 1.1 с хаком, который поддерживает join в 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"
, но я не знаю, как добавить вторую часть после AND.
Существует ли какое-либо решение для 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'],
)