Джанго Rest-Framework ценовой диапазон дополнительный фильтр? - PullRequest
1 голос
/ 13 марта 2019

В моем Django Rest-Framework API есть следующее представление Django

from django_filters.rest_framework import DjangoFilterBackend, RangeFilter, FilterSet
from rest_framework.filters import OrderingFilter, SearchFilter

from rest_framework import generics
from api.serializers import UserSerializer
from django.contrib.auth.models import User
from rest_framework import permissions
from api.permissions import IsOwnerOrReadOnly

from MyGameDBWebsite.models import Game, GameDeveloper, GameGenre, GameConsole
from api.serializers import GameSerializer, DeveloperSerializer, GenreSerializer, ConsoleSerializer


class GameList(generics.ListCreateAPIView):
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    serializer_class = GameSerializer

    filter_backends = (DjangoFilterBackend, OrderingFilter, SearchFilter,)
    filter_fields = ('owner__username', 'id', 'game_title', 'game_developer_name', 'game_console',
                     'game_genre', 'game_release_year', 'game_price',)

    ordering_fields = ('owner__username', 'id', 'game_title', 'game_developer_name', 'game_console',
                       'game_genre', 'game_release_year', 'game_price',)

    search_fields = ('game_title', 'game_release_year', 'game_price',)

    queryset = Game.objects.all()

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

Мой выходной URL-адрес следующий: http://127.0.0.1:8000/api/?owner__username=&id=&game_title=&game_developer_name=&game_console=&game_genre=&game_release_year=&game_price=

Я хочу создать диапазон цен, чтобы яможно вызвать API из URL, чтобы получить результаты в ценовом диапазоне

1 Ответ

1 голос
/ 13 марта 2019

Вы должны определить filterset_class и использовать его в своих представлениях.

В случае RangeFilter, Вы должны определить свое ценовое поле с помощью RangeFilter

Пример

class GameFilter(filters.FilterSet):
    <b>game_price = filters.RangeFilter()</b>

    class Meta:
        model = Game
        fields = ['game_price']

и, следовательно, ваш URL будет таким, как /api/?game_price_min=123&game_price_max=321

...