При использовании SearchFilter я получаю сообщение об ошибке при попытке поиска - PullRequest
0 голосов
/ 17 июня 2019

Когда я использую функцию поиска в моем API, я получаю сообщение об ошибке «Не удается разрешить ключевое слово« q / c »в поле. Возможные варианты:« XXX »». Q или c зависит от того, на какой странице API я нахожусь. Я полагаю, что «c» обозначает один из вариантов, а я предполагаю «q» - один из вопросов.

from rest_framework import generics  
from . serializers import QuestionSerializer, ChoiceSerializer  
from django_filters.rest_framework import DjangoFilterBackend  
from rest_framework.filters import OrderingFilter, SearchFilter


from polls.models import Choice, Question


# need to create a view for each serializer class QuestionList(generics.ListAPIView):
    serializer_class = QuestionSerializer  # set the serializer
    queryset = Question.objects.all()  # set the query set to all the objects of that view
    filter_backends = (DjangoFilterBackend, OrderingFilter, SearchFilter)  # allows for filters
    filter_fields = {'id': ['gte', 'lte', 'exact'], 'pub_date': ['gte', 'lte']}
    ordering_fields = ('id', 'question_text', 'pub_date')
    search_fields = 'question_text'


class ChoiceList(generics.ListAPIView):
    serializer_class = ChoiceSerializer
    queryset = Choice.objects.all()
    filter_backends = (DjangoFilterBackend, OrderingFilter, SearchFilter)
    # trying to do greater than or less than filter fields stuff
    filter_fields = {'id': ['gte', 'lte', 'exact'], 'votes': ['gte', 'lte', 'exact']}
    ordering_fields = ('id', 'votes', 'choice_text', 'question',)
    search_fields = 'choice_text'

Вот страница с ошибкой, которую я получаю, когда пытаюсь использовать поиск

1 Ответ

1 голос
/ 17 июня 2019

Документация гласит следующее:

Атрибут search_fields должен представлять собой список имен полей текстового типа в модели

Вы присваиваете строки обеим search_fields переменным.Измените его на список или кортеж следующим образом:

search_fields = ('question_text',)
search_fields = ('choice_text',)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...