[django]drf知识点梳理-过滤

  • 准备数据
- script/add_user.py

import sys
import os

project_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(project_dir)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ops.settings")

import django
django.setup()
from django.contrib.auth import get_user_model
User = get_user_model()

def get_users():
    for user in User.objects.all():
        print(user.username)

if __name__ == "__main__":
    get_users()
  • 配置过滤
pip install django_filters
安装到app



注: django_filters.rest_framework.DjangoFilterBackend 支持drf.
- users/filters.py

import django_filters
from django.contrib.auth import get_user_model
User = get_user_model()

class UserFilter(django_filters.FilterSet):
    username = django_filters.CharFilter(field_name="username", lookup_expr='contains')

    class Meta:
        model = User
        fields = ['username']
- users/vuews.py

class UserViewset(viewsets.ReadOnlyModelViewSet):
    """
    retrieve:
        返回指定用户信息
    list:
        返回用户列表
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_class = UserFilter
    filter_fields = ("username",)
- settings.py

REST_FRAMEWORK = {
    "PAGE_SIZE": 10,
    #"DEFAULT_PAGINATION_CLASS":"rest_framework.pagination.PageNumberPagination",
    "DEFAULT_PAGINATION_CLASS":"users.pagination.Pagination",
    'DEFAULT_FILTER_BACKENDS': (
        'django_filters.rest_framework.DjangoFilterBackend',
    )
}

猜你喜欢

转载自www.cnblogs.com/iiiiiher/p/9923526.html
今日推荐