我正在考虑使用一个原始查询来快速解决我的大脑或Django ORM的局限性,但是我不想重新开发支持现有ORM代码(例如过滤器)所需的基础结构。现在,我陷入了两个死胡同:
编写内部原始查询,然后像其他任何查询集一样重用该查询。即使我的原始查询选择了正确的列,我也无法对其进行过滤:
AttributeError:“ RawQuerySet”对象没有属性“ filter”
another answer证实了这一点,但我仍然希望该信息已经过时。
queryset.query.get_compiler(DEFAULT_DB_ALIAS).as_sql()
来检索原始SQL-我也将如何获取参数(显然没有实际运行查询)?答案 0 :(得分:1)
处理复杂查询的一种方法是编写一个封装查询的VIEW,然后在其前面放置一个模型。您仍然可以进行过滤(并且根据您的视图,您甚至可以下拉参数来提高查询性能)。
要获得由视图支持的模型,您需要做的就是将其设置为“非托管”,然后由迁移操作创建视图。
如果可以的话,最好尝试编写一个QuerySet,但是有时是不可能的(例如,因为您使用的是无法使用ORM表示的内容,或者您需要进行LATERAL JOIN之类的操作)