问题:
在前后端分离的项目中,涉及到多表数据展示,过滤,分页的实现过程
解决办法:
一、后端接口的实现
1.路由(urls文件):
from django.urls import path
from . import views
urlpatterns = [
path(r"category/", views.CourseCategoryListAPIView.as_view()),
path(r"courses/", views.CourseListAPIView.as_view()),
]
2.视图
因为只涉及数据的展示,故继承ListAPIView,指定查询集和序列化器
过滤:添加属性filter_fields;分页:添加属性pagination_class。关于过滤和分页的详解:移步另一篇博客
from rest_framework.generics import ListAPIView
from . import models
from .serializers import CourseCategoryModelSerializer, CourseListModelSerializer
from .pagenations import LargeResultsSetPagination
class CourseCategoryListAPIView(ListAPIView):
"""
课程分类
"""
queryset = models.CourseCategory.objects.filter(is_show=True, is_deleted=False).order_by("orders", "-id")
serializer_class = CourseCategoryModelSerializer
class CourseListAPIView(ListAPIView):
"""
课程列表
"""
queryset = models.Course.objects.filter(is_deleted=False, is_show=True).order_by('id') # 可以按id倒序
serializer_class = CourseListModelSerializer
# 可按字段course_category过滤,前端发请求时www.xxxx/xx/?course_category=1可拿到course_category=1的数据
filter_fields = ('course_category',)
# 需要自定义类LargeResultsSetPagination继承PageNumberPagination
pagination_class = LargeResultsSetPagination
关于过滤:
1)需要安装dja