小编das*_*asm的帖子

QuerySet:带AND的LEFT JOIN

我使用旧的Django 1.1版与hack,支持加入extra().它有效,但现在是改变的时候了.Django 1.2使用RawQuerySet,所以我重写了我的代码以解决该问题.问题是,RawQuery不支持我在代码中有很多的过滤器等.在CaktusGroup上挖掘Google,我发现,我可以使用query.join().这会很棒,但在代码中我有:

LEFT OUTER JOIN "core_rating" ON 
("core_film"."parent_id" = "core_rating"."parent_id" 
AND "core_rating"."user_id" = %i
Run Code Online (Sandbox Code Playgroud)

在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'],  
     )
Run Code Online (Sandbox Code Playgroud)

python sql django left-join

7
推荐指数
1
解决办法
2169
查看次数

标签 统计

django ×1

left-join ×1

python ×1

sql ×1