Как реализовать поля поиска и теги Django) с использованием Framework Django REST
Поиск Django с помощью Django Rest Framework
1. Установить фреймворк Django REST
$ pip install djangorestframework # Rest Framework $ pip install markdown # Markdown support for the browsable API. $ pip install django-filter # Filtering support
2. Приложения ADD в настройках.py
INSTALLED_APPS = [ ... 'rest_framework', 'django_filters', ]
3. Добавьте бэкэнд фильтра в ваши настройки:
REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'] }
4. Класс Searchfilter поддерживает простой поиск на основе параметров одного запроса и основан на функциональности поиска администратора Django. Класс SearchFilter будет применяться только в том случае, если представление имеет набор атрибутов search_fields. Атрибутом search_fields должен быть списком имен полей типа текста в модели, таких как Charfield или Textfield. Имя файла – views.py
from rest_framework import filters class UserListView(generics.ListAPIView): queryset = User.objects.all() serializer_class = UserSerializer filter_backends = [filters.SearchFilter] search_fields = ['username', 'email']
5. Это позволит клиенту отфильтровать элементы в списке, делая запросы, такие как:
http://example.com/api/users?search=username
6. Вы также можете выполнить связанный поиск на иностранной кладке или многопоманфилде с нотацией API API API:
search_fields = ['username', 'email', 'profile__profession']
7. Для полей Jsonfield и Hstorefield вы можете фильтровать на основе вложенных значений в структуре данных, используя одну и ту же нотацию с двойным соглашением:
search_fields = ['data__breed', 'data__owner__other_pets__0__name']
8. По умолчанию поиски будут использовать нежелательные частичные совпадения. Параметр поиска может содержать несколько терминов поиска, которые должны быть отделены пробелы и/или запятой. Если используются несколько членов поиска, то объекты будут возвращены в списке, только если все предоставленные термины сопоставлены.
Поведение поиска может быть ограничено путем приготовления различных символов к search_fields.
'^' Starts-with search. '=' Exact matches. '@' Full-text search. (Currently only supported Django's PostgreSQL backend.) '$' Regex search. Example - search_fields = ['=username', '=email']
Добавление тегов-ключевых слов и их поиск
1. Установите Taggit и Taggit Searializer
$ pip install django-taggit $ pip install django-taggit-serializer
2. Адд Taggit и Taggit_serializer в приложениях – settings.py
INSTALLED_APS = ( ... 'taggit`, 'taggit_serializer', )
3.Import и добавьте Taggit Manager в моделях.py
from django.db import models from taggit.managers import TaggableManager class Food(models.Model): # ... fields here tags = TaggableManager()
4. Адд Taggit Serializer на ваш сериализатор
from taggit_serializer.serializers import (TagListSerializerField,TaggitSerializer) class YourSerializer(TaggitSerializer, serializers.ModelSerializer): tags = TagListSerializerField() class Meta: model = tags
5. Модель тегов добавить в полях поиска
from rest_framework.filters import SearchFilter class ListBooks( generics.ListCreateAPIView ): serializer_class = BooksSerializer filter_backends = [filters.SearchFilter] search_fields = ['^books','tags__name']
использованная литература
Оригинал: “https://dev.to/tikam02/how-to-implement-django-search-field-and-tags-keywords-286a”