【问题标题】:django complex postgres query parsingdjango 复杂的 postgres 查询解析
【发布时间】:2019-05-29 11:44:35
【问题描述】:

我前端的用户可以像这样在我的模型的 id 上提交任意嵌套查询字符串

querystring="(driver = 1 AND routes = 3) OR ( driver = 2 AND weather = 1 )"

我想在后端使用djangos complex Q函数来查询这个字符串,这意味着我需要把querystring变成类似

的东西
criterion = \
(Q(detail__drivers=1) & Q(routes =3) ) | (Q(detail__driver=2) & Q(detail__weather=1) )

为了能够过滤使用

self.queryset.filter(criterion)

但是如何在保持括号结构的同时自动将字符串翻译成标准呢?

【问题讨论】:

  • 你需要编写一个解析器,它可以理解 ()、AND 和 OR 的分组。看this
  • 为什么要使用Q,是不是可以简单的使用self.queryset.filter(detail__drivers__id__in=[1], routes__id__in=[3], detail__driver__id__in=[2], detail__weather__id__in=[1])??
  • 这样你会失去 AND/OR 逻辑
  • 当所有值都是单一的时,不确定为什么要使用 __in。为什么不detail__drivers=1 & routes__id=3 等?
  • @DanielRoseman 你当然是对的

标签: python sql django django-models


【解决方案1】:

试试这个:

self.queryset.filter(Q(detail__drivers=1, routes =3) |(Q(detail__driver=2, detail__weather=1))

【讨论】:

  • 恐怕这不能回答问题
  • 好的,所以在这种情况下,您可以将 Raw-sql-queries 与 django 一起使用
猜你喜欢
  • 2021-09-22
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2012-10-25
  • 2013-06-09
相关资源
最近更新 更多