我的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=
我想创建一个价格范围,这样我就可以从URL调用API来获取价格范围内的结果
发布于 2021-09-22 10:30:14
指定FilterSet对于更高级的过滤要求,您可以指定视图应该使用的FilterSet类。例如:
import django_filters
from myapp.models import Game
from myapp.serializers import GameSerializer
from rest_framework import generics
class GameListFilter(django_filters.FilterSet):
min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
max_price = django_filters.NumberFilter(name="price", lookup_type='lte')
class Meta:
model = Game
fields = ['min_price', 'max_price']
class GameList(generics.ListAPIView):
queryset = Game.objects.all()
serializer_class = GameSerializer
filter_class = GameListFilter这将允许您发出如下请求:
http://example.com/api/games?max_price=8.00https://stackoverflow.com/questions/55137016
复制相似问题