Функциональность поиска в Django ORM
если в таблице есть два типа данных: 'ABC-DE' и 'ABCDE' если кто-то ищет с пробелом и подчеркиванием или дефисом, то как искать это без регулярного выражения
Q
является лучшим.
from django.db.models import Q
Пример:
posts.filter(Q(title__icontains=query) | Q(tags__name__icontains=query) | Q(body__icontains=query)).order_by('-updated').distinct()
Не очень хорошо со временем отклика, но вы можете сделать так:
Этот запрос будет игнорировать space, hyphen
и вам также следует удалить все символы спецификации из поискового ввода.
from django.db.models.functions import Lower, Replace
search_input = (search_input.replace(" ","").replace("-","").replace("_","")).lower()
Post.object.annotate(name_lower=Replace(Replace(Lower("name"), Value(" "), Value("")), Value("-"), Value(""))).filter(name_lower__icontains=search_input)