我使用旧Django版本1.1与黑客,支持加入extra()。它有效,但现在是时候进行更改了。 Django 1.2使用RawQuerySet,因此我已经为该解决方案重写了我的代码。问题是,RawQuery不支持过滤器等,我有很多代码。 通过Google挖掘,on CaktusGroup我发现,我可以使用query.join()。 这将是巨大的,但在我的代码有:QuerySet:左加入和
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)?
这是额外的我们当前的代码片段()
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'],
)
好的,谢谢。我想,这可能存在某种黑客攻击。 – 2011-05-14 17:33:41