from rest_framework import viewsets
from api.serializers import UserSerializer
from api.models import User
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all().order_by('create_time')
serializer_class = UserSerializer
只需要添加url_filter过滤模块,然后再增加字段定义就可以:
from url_filter.integrations.drf import DjangoFilterBackend
from rest_framework import viewsets
from api.serializers import UserSerializer
from api.models import User
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all().order_by('create_time')
serializer_class = UserSerializer
filter_backends = [DjangoFilterBackend]
filter_fields = ['username', 'email']
然后就可以在URL中使用如下查询:
# get user with id 5
example.com/users/?id=5
# get user with id either 5, 10 or 15
example.com/users/?id__in=5,10,15
# get user with id between 5 and 10
example.com/users/?id__range=5,10
# get user with username "foo"
example.com/users/?username=foo
# get user with username containing case insensitive "foo"
example.com/users/?username__icontains=foo
# get user where username does NOT contain "foo"
example.com/users/?username__icontains!=foo
# get user who joined in 2015 as per user profile
example.com/users/?profile__joined__year=2015
# get user who joined in between 2010 and 2015 as per user profile
example.com/users/?profile__joined__range=2010-01-01,2015-12-31
# get user who joined in after 2010 as per user profile
example.com/users/?profile__joined__gt=2010-01-01