django - Django - 检查arrayfield元素是否在字符串中
问题描述
所以我想编写一个查询来查找带有 ArrayField 的对象,其中 ArrayField 中的一个元素在另一个字符串中
例如一个书籍模型,包含名为 'Synonyms' 的 ArrayField,
Book1 Synonyms : ['very good','awesome']
Book2 Synonyms : ['good','okay']
所以我想做的是,我想做某种搜索,假设用户搜索“它非常好”,所以它会导致 Book1。
我试图将用户搜索字符串拆分为数组,并执行类似的循环
for x in user_string.split():
Book.objects.filter(synonyms__icontains = x)
它有效,但是,如果同义词之一是“哈哈”,然后用户搜索字符串是“哈”,它仍然会返回该对象。
想要的是查询返回字符串中具有精确元素的对象。例如,如果用户搜索包含单词“good”,则返回 book2,但如果搜索包含单词“very good”,则返回 book1
解决方案
如果您想使用诸如exact
查找用法之类的内容进行搜索,则必须尝试使用contained_by
查找。
如果所有用户字符串必须在每个同义词数组中(如AND
逻辑运算):
qs = Book.objects.all()
for synonym in user_string.split():
qs = qs.filter(synonyms__contained_by=[synonym])
如果任何用户字符串必须在每个同义词数组中(如OR
逻辑操作):
qs = Book.objects.filter(synonyms__contained_by=user_string.split())
推荐阅读
- java - Spring在一个类中拦截异常
- reactjs - reactjs阿波罗反应取消请求
- snmp - 在 4.4.12 中使用 resolveWithMib 面临问题“TypeError:resolveWithMib() 恰好需要 2 个参数(3 个给定)”。它在 4.4.4 中工作
- java - 如何从 firebase 实时数据库中检索两个不同的值并在 onDataChange 方法之外使用?
- python - 处理内存中的大量文本数据
- php - 防止 div 从表 th 中的新行开始
- php - Carbon createFromFormat 错误 -> 数据丢失
- java - 为什么 AbstractOwnableSynchronizer.exclusiveOwnerThread 未声明为 volatile?
- javascript - 在下拉列表中控制月份年份
- sapui5 - 智能表扩展到 2 个实体集?