Почему запросы "green bay" не работают, когда "green" или "bay" работают в моем представлении Django? - PullRequest
0 голосов
/ 11 ноября 2019

Вот мой взгляд:

def search(request):
    if request.method == 'GET':
        try:
            q = request.GET.get('search_box', None)
            s_or_l = request.GET.get('s_or_l', None)
            p_class = request.GET.get('p_class', None)
            if p_class:
                posts = Listing.objects.filter(title__contains=q, is_live=1, sale_or_lease=s_or_l,
                                               property_class=p_class) | \
                        Listing.objects.filter(street_address__contains=q, is_live=1, sale_or_lease=s_or_l,
                                               property_class=p_class) | \
                        Listing.objects.filter(city__contains=q, is_live=1, sale_or_lease=s_or_l,
                                               property_class=p_class) | \
                        Listing.objects.filter(state__contains=q, is_live=1, sale_or_lease=s_or_l,
                                               property_class=p_class)
            else:
                posts = Listing.objects.filter(title__contains=q, is_live=1, sale_or_lease=s_or_l) | \
                        Listing.objects.filter(street_address__contains=q, is_live=1, sale_or_lease=s_or_l) | \
                        Listing.objects.filter(city__contains=q, is_live=1, sale_or_lease=s_or_l) | \
                        Listing.objects.filter(state__contains=q, is_live=1, sale_or_lease=s_or_l)
            return render(request, 'search/results.html', {'posts': posts, 'q': q})
        except KeyError:
            return redirect('home')

Для свойства с city, установленным в "Грин-Бэй", следующие поиски работают как задумано:

green

bay

Green Bay

, но green bay <- не работает. Почему это? Как я могу это исправить? </p>

Почему он чувствителен только к регистру, когда есть пробел? Дайте мне знать, если нужна дополнительная информация. Я бы хотел исправить это как можно скорее.

1 Ответ

1 голос
/ 11 ноября 2019

Используйте icontains вместо contains для нечувствительного к регистру поиска

Listing.objects.filter(city__icontains=q, is_live=1, sale_or_lease=s_or_l)

Относительно того, почему green или bay или Green Bay работает, но не green bay, я думаю,отдельные термины green и bay встречаются где-то еще в нижнем регистре, возможно, в вашем названии или на улице.

Фильтрация с помощью contains для green или bay никоим образом не должна возвращать Green Bay, если тольковы используете icontains

...