跳到主要内容

搜索查询

概述​

搜索查询定义了 Labii 应返回哪些记录。您可以在列表视图筛选、高级搜索以及支持查询输入的小插件中使用查询。

通常,查询以 URL 参数的形式编写。

查询格式​

查询包含三个部分:

[field]__[expression]=value

# Example:
name__icontains=test

您可以使用 __ 将表达式串联起来。

# Convert date_start to date, then return records on/after 2022-02-01
date_start__asdate__gte=2022-02-01

查询表达式​

支持的表达式包括:

  • contains: 返回与提供的值匹配的结果,区分大小写。
  • not_contains: 返回不与提供的值匹配的结果,区分大小写。
  • icontains: 返回与提供的值匹配的结果,不区分大小写。
  • not_icontains: 返回不与提供的值匹配的结果,不区分大小写。
  • in: 返回在由 , 分隔的提供的列表中的结果。
  • jcontains: 返回与提供的值匹配的 JSON 字段的结果。
  • jcontains_any: 返回与由逗号分隔的提供的值中的任意一个匹配的 JSON 字段的结果。
  • not_jcontains: 返回不与提供的值匹配的 JSON 字段的结果。
  • acontains: 返回 JSON 数组字段中包含逗号分隔值列表的结果。
  • asimilarity: 通过将 JSON 字段与逗号分隔的输入字符串进行比较,返回相似度高于阈值的结果。
    • asimilarity_65: 返回 JSON 字段与逗号分隔的输入字符串相似度超过 65% 的结果。
    • asimilarity_75: 返回 JSON 字段与逗号分隔的输入字符串相似度超过 75% 的结果。
    • asimilarity_85: 返回 JSON 字段与逗号分隔的输入字符串相似度超过 85% 的结果。
    • asimilarity_95: 返回 JSON 字段与逗号分隔的输入字符串相似度超过 95% 的结果。
  • gt: 返回大于提供的值的结果。
  • gte: 返回大于或等于提供的值的结果。
  • lt: 返回小于提供的值的结果。
  • lte: 返回小于或等于提供的值的结果。
  • int: 将数据库值转换为整数。
  • asdate: 将数据库值转换为日期对象。
  • asstring: 将数据库值转换为字符串。
  • ne: 返回不等于提供的值的结果。
信息

在高级搜索中进行批量 ID 匹配时,请使用 In 查找表达式,并用逗号分隔值,例如:sid__in=id1,id2,id3。

多字段查询​

使用 & 来组合多个条件。

name__icontains=test&is_archived=false

JSON 字段筛选​

JSON 字段筛选示例:

  • 包含字符串值:jsonfield__icontains=test
  • 不包含字符串值:jsonfield__not_contains=test
  • 包含键:jsonfield__has_key=test
  • 包含对象:jsonfield__jcontains={'name':'test'}
  • 不包含对象:jsonfield__not_jcontains={'name':'test'}

通过筛选集进行筛选:

  • 单个筛选集:filter__sid=xxx
  • 使用 AND 组合多个筛选集:filter__sid=xxx,xxx
  • 使用 OR 组合多个筛选集:filter__sid__in=xxx,xxx

通过 JSON 查询进行筛选(结构与筛选集相同):

  • jquery={a:1,b:2,c=3}
  • jquery={"or": [{sid:aa,data:bb}, {sid:aa,data:bb}]}
  • jquery={"and": [{sid:aa,data:bb}, {sid:aa,data:bb}]}
注意

数据库 JSON 字段不再支持旧版数组格式:

["or", {sid:aa,data:bb}, {sid:aa,data:bb}]

请改用此对象格式:

{"or": [{sid:aa,data:bb}, {sid:aa,data:bb}]}

示例​

  1. 所有未归档的实验:

    {"is_archived": false, "is_locked": false}
  2. 所有未完成的实验(至少有一个签署人未签名):

    {"is_archived": false, "signer__signature__isnull": true}
  3. 已签名但未完成的实验(至少有一个见证人未签名):

    {"is_archived": false, "signer__signature__isnull": true, "is_locked": true}