Поиск django: Django поиск на сайте
Django поиск на сайте
Для организации поиска на сайте, который основан на Django , и использует базу данных PostgreSQL можно использовать модуль для поиска по этой базе данных, поставляемый с Django. Тем более, что данный поиск обеспечивает полнотекстовый поиск в достаточной мере для небольшого ресурса.
Но для того, чтобы выдача поисковых запросов походила больше на главную страницу, добавим возможность пагинации страниц выдачи, а результаты будут выводиться по 10 штук на одной странице. И для этого также будем использовать модуль django_bootstrap3.
В итоге имеем следующий план действий:
- Добавляем приложение для организации поиска;
- Добавляем url поиска;
- Добавляем форму поиска;
- Описываем шаблон страницы поиска.
- Описываем представление для обработки выдачи поиска;
Добавляем приложение для поиска
Стандартный момент по созданию нового приложения в вашем проекте Django:
python manage.db startapp search
На выходе получим новое приложение со следующей структурой:
search/ migrations/ __init__.py __init__.py admin.py apps.py models.py tests.py views.py
Подкорректируем немного файл settings.py . Добавим конфигурацию нашего приложения, используется та, что создастся по умолчанию, также воспользуемся двумя модулями:
- Для работы с postgres
- django_bootstrap3
INSTALLED_APPS = [ ... 'search.apps.SearchConfig', 'django.contrib.postgres', 'bootstrap3', ... ]
Добавляем urls поиска
Во-первых, необходимо добавить url шаблон, который отправит запрос в приложение search.
from django.conf.urls import url, include urlpatterns = [ ... url(r'^search/', include('search.urls')), ]
Во-вторых, нужно добавить urls.py файл в само приложение search со следующим содержимым, чтобы настроить отправку запроса в представление.
from django.conf.urls import url from . import views app_name = 'search' urlpatterns = [ url(r'^$', views.ESearchView.as_view(), name='index'), ]
Форма поиска
Форма поиска добавлена в базовый шаблон base.html в приложении home , который будет наследоваться шаблоном страницы поиска.
Приведу тот вариант, который используется на данном сайте с использованием django-bootstrap3
{% load bootstrap3 %} <form action="{% url 'search:index' %}" method="get"> <div> <input name="q" type="text" placeholder="Поиск"> <span> <button type="submit">{% bootstrap_icon 'search' %}</button> </span> </div> </form>
Разберёмся в ключевых моментах:
- В поле action указан адрес куда будет посылаться запрос;
- Будет использоваться метод GET, поскольку пользователь может захотеть поделиться результатом поиска;
- bootstrap_icon подгружает иконки из набора glyphicons.
Шаблон страницы поиска
Для выдачи результатов я использовал организацию внешнего вида такую же, как и на главной странице сайта. Подробнее об этом можете почитать в статье о внедрении пагинации .
Но самым главным отличием от главной страницы является то, что каким-то образом необходимо совместить перелистывание страниц при пагинации и сохранение запроса. Для этого можно подставлять кастомизированный URL в bootstrap_pagination. А именно url=last_question,который будет содержать последний запрос, который был задан в форме поиска. К этому URL автоматически будет добавлен номер страницы.
{% extends 'home/base.html' %} {% load bootstrap3 %} {% block page %} <h2>Поиск</h2> {% if article_lists %} {% for article in article_lists %} <article> <a href="{{ article.get_absolute_url }}"> <h3>{{ article.article_title }}</h3> </a> {{ article.desctription|safe }} <p><a href="{{ article.get_absolute_url }}">Читать далее</a></p> </article> {% endfor %} {% bootstrap_pagination article_lists url=last_question %} {% else %} <p>Не найдено публикаций по вашему запросу<br>Попробуйте повторить запрос с другой формулировкой</p> {% endif %} {% endblock %}
Представление поиска
Важным моментом является здесь то, что из запроса необходимо подготовить URL, который будет содержать последний запрос и подставляться в кнопочки пагинации. Иначе при нажатии кнопки пагинации поиск будет ошибочен и скорее всего будете получать ошибку 500 .
from django.shortcuts import render_to_response from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.views import View from knowledge.models import Article class ESearchView(View): template_name = 'search/index.html' def get(self, request, *args, **kwargs): context = {} question = request.GET.get('q') if question is not None: search_articles = Article.objects.filter(article_content__search=question) # формируем строку URL, которая будет содержать последний запрос # Это важно для корректной работы пагинации context['last_question'] = '?q=%s' % question current_page = Paginator(search_articles, 10) page = request.GET.get('page') try: context['article_lists'] = current_page.page(page) except PageNotAnInteger: context['article_lists'] = current_page.page(1) except EmptyPage: context['article_lists'] = current_page.page(current_page.num_pages) return render_to_response(template_name=self.template_name, context=context)
Урок 34 / Создание представления поиска / Блог на Django 2.0
Теперь нужно создать представление для того, чтобы пользователи могли осуществлять поиск по постам. В первую очередь нужна форма поиска. Отредактируйте файл forms.py
приложения blog
и добавьте следующую форму:
class SearchForm(forms.Form):
query = forms.CharField()
Будем использовать поле query
, чтобы пользователи могли ввести поисковые запросы. Отредактируйте файл views.py
и добавьте следующий код:
from django.contrib.postgres.search import SearchVector
from .forms import EmailPostForm, CommentForm, SearchForm
def post_search(request):
form = SearchForm()
query = None
results = []
if 'query' in request.GET:
form = SearchForm(request.GET)
if form.is_valid():
query = form.cleaned_data['query']
results = Post.objects.annotate(
search=SearchVector('title', 'body'),
).filter(search=query)
return render(request,
'blog/post/search.html',
{'form': form,
'query': query,
'results': results})
В этом представлении в первую очередь создается экземпляр формы SearchForm
. Она будет приниматься с помощью метода GET
, так, чтобы итоговый URL включал параметр query
. Чтобы проверить, принята ли форма, проверяем параметр query
в словаре request.GET
. Когда форма принимается, создаем ее экземпляр с принятыми данными GET
и верифицируем. Если она проходит проверку, проводим поиск с помощью SearchVector
по полям title
и body
.
Представление поиска готово. Нужно создать шаблон для отображения формы и результатов поиска. Создайте файл в папке с шаблонами /blog/post/
, назовите его search.html
и добавьте следующий код:
{% extends "blog/base.html" %}
{% block title %}Search{% endblock %}
{% block content %}
{% if query %}
<h2>Posts containing "{{ query }}"</h2>
<h4>
{% with results.count as total_results %}
Found {{ total_results }} result{{ total_results|pluralize }}
{% endwith %}
</h4>
{% for post in results %}
<h5><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h5>
{{ post.body|truncatewords:5 }}
{% empty %}
<p>There are no results for your query.</p>
{% endfor %}
<p><a href="{% url "blog:post_search" %}">Search again</a></p>
{% else %}
<h2>Search for posts</h2>
<form action="." method="get">
{{ form.as_p }}
<input type="submit" value="Search">
</form>
{% endif %}
{% endblock %}
Как и в представлении поиска, узнать, была ли форма проверена, можно по присутствию параметра query
. Перед проверкой отображаем форму и кнопку подтверждения. После проверки, отображаем проведенный поиск и общее количество результатов, а также список постов.
Наконец, отредактируйте файл urls.py
приложения blog
и добавьте следующий шаблон URL:
path('search/', views.post_search, name='post_search'),
Теперь откройте https://127.0.0.1:8000/blog/search/ в браузере. Вы увидите форму. Введите запрос и нажмите на кнопку «Search».
Теперь у блога есть базовая поисковая система.
Поиск в Django REST Framework с помощью Elasticsearch / Хабр
Пользователи ищут товары в интернет-магазине, ищут стати, поиск это неотъемлемый компонент сайта. Быстрый и гибкий поиск сложно реализовать средствами реляционных баз данных. Для таких задач используют поисковые движки, один из которых Elasticsearch. Elasticsearch хорошо документирован и доступен из коробки на AWS.
Для работы с elasticsearch используется библиотека elasticsearch-py или elasticsearch-dsl-py. elasticsearch-dsl-py это надстройка над elasticsearch-py, она проста в использовании и поддерживает elasticsearch версии 5.x. На базе этой библиотеки была создана библиотека django-rest-elasticsearch, которая основана на идеологии существующего поиска в Django REST Framework. Ниже я детально распишу как реализовать поиск в Django REST Framework с помощью elasticsearch используя данную библиотеку.
В качестве примера рассмотрим реализацию простого блога с фильтрацией по тегам и поиском по заголовку статей.
Установка
Процесс установки elasticsearch и django детально расписан в официальных документациях. С установкой пакета все достаточно просто
pip install django-rest-elasticsearch
Создание модели и индекса
Создадим модель
class Blog(models.Model):
title = models.CharField(_('Title'), max_length=1000)
created_at = models.DateTimeField(_('Created at'), auto_now_add=True)
body = models.TextField(_('Body'))
tags = ArrayField(models.CharField(max_length=200), blank=True, null=True)
is_published = models.BooleanField(_('Is published'), default=False)
def __str__(self):
return self.title
После создания модели опишем нашу модель в виде elasticsearch документа.
class BlogIndex(DocType):
pk = Integer()
title = Text(fields={'raw': Keyword()})
created_at = Date()
body = Text()
tags = Keyword(multi=True)
is_published = Boolean()
class Meta:
index = 'blog'
Теперь можно создать индекс в elasticsearch
BlogIndex.init()
Автоматическое обновление документов в elasticsearch
После создания модели и индекса, нужно что бы любые изменения в нашей модели были отображены в elasticsearch. Наилучшим средством это сделать добавить django сигнал, который отправить уведомления когда будут происходит изменения в модели. Прежде чем создать сигнал создадим сериалайзер для преобразования django объекта в документ elasticsearch
from rest_framework_elasticsearch.es_serializer import ElasticModelSerializer
from .models import Blog
from .search_indexes import BlogIndex
class ElasticBlogSerializer(ElasticModelSerializer):
class Meta:
model = Blog
es_model = BlogIndex
fields = ('pk', 'title', 'created_at', 'tags', 'body', 'is_published')
Теперь добавим сигнал
from django.db.models.signals import pre_save, post_delete
from django.dispatch import receiver
from .serializers import Blog, ElasticBlogSerializer
@receiver(pre_save, sender=Blog, dispatch_uid="update_record")
def update_es_record(sender, instance, **kwargs):
obj = ElasticBlogSerializer(instance)
obj.save()
@receiver(post_delete, sender=Blog, dispatch_uid="delete_record")
def delete_es_record(sender, instance, *args, **kwargs):
obj = ElasticBlogSerializer(instance)
obj.delete(ignore=404)
После добавления сигнала, любые изменения в модели моментально будут сделаны в elasticsearch
Создание view
Приступим к создания view для поиска и фильтрации
from elasticsearch import Elasticsearch, RequestsHttpConnection
from rest_framework_elasticsearch import es_views, es_filters
from .search_indexes import BlogIndex
class BlogView(es_views.ListElasticAPIView):
es_client = Elasticsearch(hosts=['elasticsearch:9200/'],
connection_class=RequestsHttpConnection)
es_model = BlogIndex
es_filter_backends = (
es_filters.ElasticFieldsFilter,
es_filters.ElasticSearchFilter
)
es_filter_fields = (
es_filters.ESFieldFilter('tag', 'tags'),
)
es_search_fields = (
'tags',
'title',
)
Вот и все, примеры поиска
http://example.com/blogs/api/list?search=elasticsearch
http://example.com/blogs/api/list?tag=opensource
http://example.com/blogs/api/list?tag=opensource,aws
Полный код примера доступен на github. Надеюсь что статья поможет Вам реализовать поиск в Вашем проекте.
Урок 35 / Поисковые алгоритмы в Django / Блог на Django 2.0
Сокращение и ранжирование результатов
Django предлагает класс SearchQuery
для перевода запросов в объект поискового запроса. По умолчанию запросы проходят через алгоритмы сокращения, что позволяет лучше находить совпадения. Также можно отсортировать результаты по релевантности. PostgreSQL предоставляет функцию ранжирования, которая сортирует результаты на основе того, как часто текст запроса появляется и как близко они расположены относительно друг друга. Отредактируйте файл views.py
приложения blog
и добавьте следующие импорты:
from django.contrib.postgres.search import SearchVector, SearchQuery, SearchRank
Затем взгляните на эти строки:
results = Post.objects.annotate(
search=SearchVector('title', 'body'),
).filter(search=query)
Замените их этими:
search_vector = SearchVector('title', 'body') search_query = SearchQuery(query)
results = Post.objects.annotate(
search=search_vector,
rank=SearchRank(search_vector, search_query)
).filter(search=search_query).order_by('-rank')
В этом коде создается объект SeatchQuery
, после этого результаты фильтруются, а SearchRank
используется для их ранжирования. Можете открыть https://127.0.0.1:8000/blog/search/ в браузере и провести несколько тестов, чтобы увидеть, как работает сокращение и ранжирование.
Вес запросов
Можно сделать так, чтобы у определенных направлений было больше веса при сортировке по релевантности. Например, такой код подойдет, чтобы ранжировать результаты в первую очередь по заголовкам, а не по телу. Отредактируйте предыдущие строки файла views.py
приложения blog
, чтобы он выглядел так:
search_vector = SearchVector('title', weight='A') + SearchVector('body', weight='B')
search_query = SearchQuery(query)
results = Post.objects.annotate(
rank=SearchRank(search_vector, search_query)
).filter(rank__gte=0.3).order_by('-rank')
В этом коде используется дополнительный «вес» для направлений поиска в полях title
и body
. Вес по умолчанию — D
, C
, B
и A
. Они соответствуют числам 0.1, 0.2, 0.4
и 1.0
соответственно. Применим вес 1.0
к полю title
и 0.4
— body
: совпадения в заголовке будут преобладать над таковыми в теле. Отфильтруем результаты для отображения только тех, у которых вес больше 0.3
.
Поиск по схожести триграмм
Еще один поисковый алгоритм — схожесть триграмм. Триграмма — это группа из трех символов. Можно измерить схожесть двух строк, посчитав количество общих триграмм. Этот подход часто используется для измерения схожести слов во многих языках.
Для использования триграмм в PostgreSQL нужно сперва установить pg_trgm
. Используйте следующую команду, чтобы подключиться к базе данных:
psql blog
Подписывайтесь на телеграм каналы
Затем эту, чтобы установить расширение pg_trgm
:
CREATE EXTENSION pg_trgm;
Отредактируйте представление и измените его для поиска триграм. Отредактируйте файл views.py
приложения blog
и добавьте следующий импорт:
from django.contrib.postgres.search import TrigramSimilarity
Затем замените поисковый запрос Post
на следующие строки:
results = Post.objects.annotate(
similarity=TrigramSimilarity('title', query),
).filter(similarity__gt=0.3).order_by('-similarity')
Откройте https://127.0.0.1:8000/blog/search/ в браузере и проверьте разные варианты поиска триграмм. Например, введите yango
и получите результаты включающие слово django
(есть в блоге есть статьи с таким словом).
Теперь у проекта мощный поисковый движок. Еще больше информации о полнотекстовом поиске можно найти здесь https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/search/.
Простой поиск на Django — alimuradov.ru
Полнотекстовый поиск конечно хорошо, но иногда нет необходимости в нем. Реализация простого поиска, в django оказалась довольно тривиальной задачей. Дабы облегчить кому то поиск, того, на что у меня ушло несколько часов да и себе на памятку, опишу вкратце как реализовать простой поиск на Django.
Допустим у нас есть модель
class Patient(models.Model): """ Модель описывающая пациентов клиники, реализована в виде отдельного приложения, так как будет являться одной из базовых моделей исходя из логики пронраммы """ firstname = models.CharField(max_length=100, verbose_name="Имя", blank=False, null=True) lastname = models.CharField(max_length=300, verbose_name="Фамилия", blank=False, null=True) midle_name = models.CharField(max_length=300, verbose_name="Отчетство", blank=True, null=True)
Так как для отображения списка я использую CBV, а именно ListView то и переопредеять мы будем именно его
class PatientListView(CompanyProtectionMixin, ListView): model = Patient paginate_by = 12 template_name = 'patient/patient_list.html' context_object_name = 'patients' def get_queryset(self): result = super(PatientListView, self).get_queryset() query = self.request.GET.get('q') if query: query_list = query.split() result = result.filter( reduce(operator.and_, (Q(firstname__icontains=q) for q in query_list)) | reduce(operator.and_, (Q(lastname__icontains=q) for q in query_list)) | reduce(operator.and_, (Q(midle_name__icontains=q) for q in query_list)) ) return result
Теперь нам осталось внести правки в наш шаблон. В начало таблицы я добавил, форму поиска, которая содержит следующий код
<form action="{% url 'patient_list' %}" method="get" accept-charset="utf-8"> <input type="text" placeholder="Найти пациента по имени " name="q"> <span> <button type="submit"> <i></i> Поиск</button> </span> </form>
Для полноты также приведу содержимое файла urls.py
urlpatterns = [ url(r'^$', PatientListView.as_view(), name='patient_list'), ]
На этом собственно и все, единственное, во views.py в начало __icontains добавьте название ваших полей из модели.
Урок 33 / Добавление поиска по блогу / Блог на Django 2.0
Добавим поисковые возможности в блог. Django ORM позволяет проводить базовые операции по поиску совпадений с помощью, например, фильтра contains
(или его версии, учитывающей регистр, icontains
). Следующий запрос можно использовать для поиска постов, содержащих слово framework
в теле:
from blog.models import Post Post.objects.filter(body__contains='framework')
Но если планируется осуществлять сложный поиск с получением результатов, учитывающих схожесть или разный вес у полей, потребуется полнотекстовый поисковый движок.
Django предлагает мощный поиск, созданный на основе полнотекстового поиска из PostgreSQL. Модуль django.contrib.postgres
включает функции, которые есть в PostgreSQL, но которых лишены другие базы данных, поддерживаемые Django. Больше об этом поиске можно узнать здесь: https://www.postgresql.org/docs/10/static/textsearch.html.
Хотя Django и способен работать с любой базой данных, он включает модуль, поддерживающий широкий набор возможностей из PostgreSQL, которых нет в других базах данных, поддерживаемых Django.
Простой поиск
Отредактируйте файл settings.py
проекта и добавьте в пункт INSTALLED_APP
строку django.contrib.postgres
:
INSTALLED_APPS = [
'django.contrib.postgres',
]
Теперь с помощью search
можно проводить поиск:
from blog.models import Post Post.objects.filter(body__search='django')
Этот запрос использует PostgreSQL для создания направления поиска поля body
и поискового запроса «django». Результаты основаны на сопоставлении направления и запроса.
Поиск в нескольких полях
Иногда может потребоваться искать в нескольких полях. В этом случае нужно определить SearchVector
. Построим вектор, который позволит искать в полях title
и body
модели Post
:
from django.contrib.postgres.search import SearchVector
from blog.models import Post
Post.objects.annotate(
search=SearchVector('title', 'body'),
).filter(search='django')
Подписывайтесь на телеграм каналы
С помощью annotate
и SearchVector
для обоих полей получается функциональность, которая будет искать совпадения в заголовке и теле постов.
Полнотекстовый поиск — это интенсивный процесс. Если он будет осуществляться в более чем нескольких сотнях строк, нужно определить функциональный индекс, который совпадает с используемым поисковым направлением. Django предлагает поле
SearchVectorField
для моделей. Подробно об этом можно почитать здесь: https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/search/#perfomance.
Реализация поиска моделей Django, как сделать так что выводился список статей, где есть совпадения с запросом?
Не выводятся результаты поиска моделей
Сама модель, которая должна находиться:
models.py
class Articles(models.Model):
title = models.CharField(max_length = 120, verbose_name = "Заголовок")
post = models.TextField(verbose_name = "Текст")
image = models.ImageField(blank=True, upload_to='images/blog/%Y/%m/%d', help_text='150x150px',
verbose_name='Ссылка картинки')
date = models.DateTimeField(verbose_name = "Дата")
category = models.ForeignKey(Category, null = True, blank = True, on_delete = models.SET_NULL, verbose_name = "Категория") #cjplfybt мягкой связи, когда удаление вторичного объекта не приводит к удалению первичного
# Добвление лайков
likes = models.IntegerField(verbose_name='Нравится', default=0)
dislikes = models.IntegerField(verbose_name='Не нравится', default=0)
class Meta:
verbose_name_plural = "Статьи"
def __str__(self):
return self.title
вьюха от приложения «search»:
views.py
from django.views.generic import ListView
from django.db.models import Q
from news.models import Articles
class ArticleListView(ListView):
model = Articles
template_name = 'search/index.html'
def get_queryset(self):
# Получаем не отфильтрованный кверисет всех моделей
queryset = Articles.objects.all()
q = self.request.GET.get("q")
if q:
# Если 'q' в GET запросе, фильтруем кверисет по данным из 'q'
return queryset.filter(Q(title__icontains=q) | Q(post__icontains=q))
return queryset
urls.py
from django.conf.urls import url
from . import views
from .views import ArticleListView
urlpatterns = [
url(r'^article_search/', ArticleListView.as_view(), name='article_search'),
]
сама форма, которая отвечает за поиск
<form action="{% url 'article_search' %}" method="get">
<div>
<input type="text" name="q" placeholder="Введите запрос">
</div>
<button type="submit">Поиск</button>
</form>
ну и сам шаблон страницы, куда должен выводиться результат:
index.html
{% extends "mainApp/wrapper.html" %}
{% block content %}
<h2>Поиск</h2>
{% if article in article_lists %}
{% for article in article_lists %}
<article>
<a href="{{ article.get_absolute_url }}">
<h3>{{ article.article_title }}</h3>
</a>
{{ article.post|safe }}
<p><a href="{{ article.get_absolute_url }}">Читать далее</a></p>
</article>
{% endfor %}
{% else %}
<p>Не найдено публикаций по вашему запросу<br>Попробуйте повторить запрос с другой формулировкой</p>
{% endif %}
{% endblock %}
Поиск не работает, выдает вариант, что «не найдено публикаций…». Как это можно исправить?
python — какое приложение для поиска Django самое лучшее?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
- Авторизоваться
зарегистрироваться текущее сообщество
.
python — поиск по нескольким полям в Django
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира
.
Описание | Система управления контентом Django | Модульный поиск Django | Полнотекстовый многотабличный поиск | Прозрачный слой для полнотекстового поиска | Интеграция полнотекстового поиска PostgreSQL | Поддержка Elasticsearch для | Бэкэнд Xapian для Haystack | Полная интеграция | Простое добавление функции поиска / фильтрации | Поиск сфинкса в Django | Просмотр на основе классов списка поиска | Статические страницы для Haystack | Настраиваемый поиск | Найдите Django и | Многогранный поисковый движок | Прозрачный слой для полнотекстового поиска | Интегрируйте свой проект Django | Чистый поисковый движок / паук | Общий и простой способ поиска | Простые библиотеки для пометки модели | Просто инструмент Python для изменения | Последнее обновление | 6 октября 2020 г. 11:02 | 21 августа 2020 г. 16:57 | 30 марта 2020 г., 5:08 а.м. | 27 января 2015 г. 19:40:59 | 5 января 2016 г. 14:49 | Декабрь9 января 2019 г. 2:13 | 17 января 2019 г. 11:52:59 | 3 сентября 2020 г. 5:34 | Февраль19 января 2020 г. 12:58 | 9 марта 2017 г. 8:50 | 16 января 2017 г. 19:43:59 | Декабрь14 января 2012 г. 11:11 | 6 мая 2013 г. 9:45 ч. | 20 марта 2014 г. 19:39 | Сентябрь24 января 2012 г. 17:33 | 28 марта 2013 г. 2:34 | 5 октября 2020 г. 12:59 | Октябрь17 января 2012 г. 12:33 | 22 августа 2014 г. 9:18 | 2 октября 2020 г. 12:46 | Августа25 января 2018 г. 5:12 | Работает с QuerySet | И с базой данных, и с Elasticsearch | , замените QuerySet и не поддерживает ряд операций или ведет себя некорректно | , но работает только с MySQL |
.
python — Как добавить поля поиска в Django
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира
.