Persistent Filters:使用 Or 时在过滤器中的操作

Posted

技术标签:

【中文标题】Persistent Filters:使用 Or 时在过滤器中的操作【英文标题】:Persistent Filters: And operation in filters when using Or 【发布时间】:2015-08-12 21:11:10 【问题描述】:

Persistent 有一个 OR 过滤器 ||.,但它似乎没有对应的 &&. 我想做类似 A && (B || C) && (D || E) 的事情,但我不确定最干净的方法。

我想我可以创建像(A && B && D) || (A && C && D) || (A && B && E) || (A && C && E) 这样的所有组合。即使对于这个简单的例子,它也变得相当笨拙。不确定persistent 是否有更好的方法来做到这一点。

当我编译代码时(在selectList[A] ++ ([B] ||. [C]), etc.,但不确定它是否与我想要的相同。

谢谢!

【问题讨论】:

务实地说,你可以写一个QuickCheck属性来判断persistent布尔表达式是否等价于规范化的布尔表达式。 @recursion.ninja。好点子。我以前没有将 QuickCheck 与面向 DB 的函数一起使用。也就是说,我可能可以手动设置一个包含A-E 的所有布尔组合的表,看看我的selectList 是否正常工作。 【参考方案1】:

您可以将++<> 与过滤器列表一起使用。

来自Persistent manual:

people <- selectList [PersonAge >. 25, PersonAge <=. 30] []
liftIO $ print people

过滤器列表是ANDed 一起,因此我们的约束意味着“年龄大于 25 且年龄小于或等于 30”。我们稍后会介绍 ORing。

【讨论】:

感谢 Cirdec。我没有机会对其进行测试,但似乎这是组合 ANDing OR 组的方式。我认为如果提供&amp;&amp;. 作为便利功能会更干净,因此人们必须弄清楚括号的顺序是否重要。我会将其添加为功能请求。

以上是关于Persistent Filters:使用 Or 时在过滤器中的操作的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy query with OR/AND/like common filters

OpenTSDB使用Grafana的Filters type注解

Grails的CreateCriteria逻辑性和OR性都不正常。

使用 get_or_create 返回的 MultipleObjects

django admin list_filter "or" 条件

ajax $.post 一直报 Forbidden (CSRF token missing or incorrect.)