Всё просто. В models.py есть модель изделий и поиск производиться только по названию:
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.PROTECT)
brand = models.ForeignKey(Brand, on_delete=models.SET(1), default=1)
title = models.CharField(max_length=120)
...
Для поиска в views.py есть вьюха (и импорт сверху для её работы):
from django.db.models import Q
def client_search_view(request):
query = request.GET.get('q')
if query != None:
products = Product.objects.filter(Q(title__icontains=query))
context = {
'title': 'Результаты поиска по запросу: ' + query,
'products': products,
}
else:
context = {
'title': 'Введите строку поиска'
}
return render(request, 'client/client_search.html', context=context)
Естественно под это дело есть шаблон client_search.html, где находиться сама форма поиска и цикл результатов:
{% extends 'base.html' %}
{% block content %}
<h3 class="text-center">{{ title }}</h3>
<form action="{% url 'client_search' %}">
<div class="form-group">
<input type="text" class="form-control" placeholder="Вот в этой строке" name="q">
<button type="submit" class="btn btn-info"><i class="glyphicon glyphicon-search"></i> Искать</button>
</div>
</form>
{% if products %}
{% for product in products %}
....
{% endfor %}
{% else %}
<h3 class="text-center">По заданному запросу изделия отсутсвуют</h3>
{% endif %}
{% endblock %}
Ну вроде всё просто.
Да, кстати база sqlite.
Django 2
Ubuntu 18
И вот
title__icontains не срабатывает. Поведение одинаковое, как будто стоит просто
title__contains.
Т.е. например ввожу:
радиус - ничего не находит
Ввожу:
Радиус - находит.
Сначала я думал, что он не может найти, потому что первое слово. Стал пробовать title_istartswith, но он всё равно этот
i как будто не берёт в расчёт.
В чём засада? Может он не умеет с русским языком работать? UTF-8 стоит. Может ограничения sqlite? Может какой нюанс?
С уважением.