作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我使用带有 hack 的旧版 Django 1.1,它支持在 extra() 中加入。它有效,但现在是改变的时候了。 Django 1.2 使用 RawQuerySet 所以我已经为该解决方案重写了我的代码。问题是,RawQuery 不支持我在代码中有很多的过滤器等。通过谷歌挖掘,on 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"
但我不知道如何在之后添加第二部分和。
Django 是否存在任何解决方案,我可以使用自定义 JOIN 而无需重写所有过滤器代码(原始)?
这是我们当前在 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'],
)
最佳答案
不幸的是,这里的答案是否定的。
与大多数 Django 一样,Django ORM 遵循一种哲学,即简单的事情应该很容易,困难的事情应该是可能的。在这种情况下,您肯定处于“困难”领域,“可能”的解决方案是简单地编写原始查询。肯定存在这样的情况,其中编写原始查询可能很困难并且感觉有点恶心,但从项目的角度来看,这种情况很少见,无法证明添加此类功能的成本是合理的。
关于python - 查询集 : LEFT JOIN with AND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5815775/
我是一名优秀的程序员,十分优秀!