我使用舊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