Рубрики
Без рубрики

Как реализовать поля поиска Django и теги) ключевые слова.

Как реализовать поля поиска и теги Django) с использованием Framework Django REST … С тегом Django, Djangorestframework, Python.

Как реализовать поля поиска и теги 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”