【发布时间】:2020-04-28 06:13:34
【问题描述】:
我有一个这样的模型:
class Product(models.Model):
name = models.CharField(max_length=5)
名称示例:A-123
是否可以过滤此名称字段,以便我可以输入连字符或将其省略,并获得相同的结果?例如,查询“A-123”和“A123”将返回相同的项目。使用常规过滤器,我只有在执行“A-123”时才会得到结果。
如果不是,最好的解决方案是制作一个填充辅助“可搜索”字段的 on_save 触发器吗?
这将是我最初的想法,但我担心这会效率低下。
我考虑过的另一种方法是拉出所有对象,然后循环并删除连字符以找到匹配项,但我再次担心性能问题/效率。
【问题讨论】:
-
你能告诉我们你的过滤查询吗?
-
当然!当前过滤器将是
product = Product.objects.filter(name="A123")但是这不会返回任何结果。 -
你可以使用 __contains 或 __icontains(不区分大小写)
-
当我运行这个过滤器时,
Product.objects.get(sku__contains="A123"),我没有得到任何结果。 -
@popcorn 这可能有点冒险。如果您开始使用 LIKE,A-123 也会返回 BA-123。