使用以下 Django 模型:
class Item(models.Model):
name = CharField(max_len=256)
description = TextField()
我需要制定一个过滤器方法,该方法采用 n 个单词 ( word_list
) 的列表并返回 Items 的查询集,其中每个单词word_list
都可以在名称或描述中找到。
使用单个字段执行此操作非常简单。使用这里描述的 reduce 技术(这也可以通过for
循环来完成),这看起来像:
q = reduce(operator.and_, (Q(description__contains=word) for word in word_list))
Item.objects.filter(q)
我想做同样的事情,但要考虑到每个单词都可以出现在名称或描述中。我基本上想为每个单词查询两个字段的连接。这可以做到吗?
我读过 Postgresql 中有一个连接运算符,||
但我不确定是否可以在 django 中以某种方式使用它来实现这一目的。
作为最后的手段,我可以创建包含两个字段组合的第三列,并通过post_save
信号处理程序和/或save
方法覆盖对其进行维护,但我想知道是否可以在不维护这种类型的情况下即时执行此操作“搜索索引”类型的列。