Uso la antigua versión de Django 1.1 con hack, que admite join en extra(). Funciona, pero ahora es el momento de los cambios. Django 1.2 usa RawQuerySet, así que reescribí mi código para esa solución. El problema es que RawQuery no admite filtros, etc. que tengo muchos en el código. Excavando a través de Google, on CaktusGroup He encontrado que podría usar query.join(). Sería muy bueno, pero en código que tengo:QuerySet: LEFT JOIN con AND
LEFT OUTER JOIN "core_rating" ON
("core_film"."parent_id" = "core_rating"."parent_id"
AND "core_rating"."user_id" = %i
En query.join() He escrito "core_film"."parent_id" = "core_rating"."parent_id"
primera parte, pero no sé cómo añadir la segunda parte después de Y.
¿Existe alguna solución para Django, que podría usar JOINs personalizados sin reescribir todo el código de los filtros (Raw)?
Este es nuestro fragmento de código actual en actividades 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'],
)
Bien, gracias. Pensé, que tal vez exista algún tipo de truco para eso. –