首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Rest-框架价格范围额外的过滤器?

Django Rest-框架价格范围额外的过滤器?
EN

Stack Overflow用户
提问于 2019-03-13 16:06:58
回答 1查看 1K关注 0票数 1

我的Django Rest-Framework API中有以下Django视图

代码语言:javascript
复制
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来获取价格范围内的结果

EN

回答 1

Stack Overflow用户

发布于 2021-09-22 10:30:14

指定FilterSet对于更高级的过滤要求,您可以指定视图应该使用的FilterSet类。例如:

代码语言:javascript
复制
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

这将允许您发出如下请求:

代码语言:javascript
复制
http://example.com/api/games?max_price=8.00
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55137016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档