课程接口修订

路由:course/urls.py
path("category/", views.CategoryListAPIView.as_view()),
path("", views.CourseListAPIView.as_view()),
视图:course/views.py
from rest_framework.generics import ListAPIView

from . import models, serializers

class CategoryListAPIView(ListAPIView):
    queryset = models.CourseCategory.objects.filter(is_delete=False, is_show=True).order_by('orders')
    serializer_class = serializers.CategoryModelSerializer


from .paginations import CoursePageNumberPagination
from rest_framework.filters import OrderingFilter
# 安装django-filter,注册django_filters
from django_filters.rest_framework import DjangoFilterBackend
class CourseListAPIView(ListAPIView):
    queryset = models.Course.objects.filter(is_delete=False, is_show=True)
    serializer_class = serializers.CourseModelSerializer
    # 分页
    pagination_class = CoursePageNumberPagination
    #
    filter_backends = [OrderingFilter, DjangoFilterBackend]
    ordering_fields = ('id', 'price', 'students')
    filter_fields = ('course_category', )
分页:paginations.py
class CoursePageNumberPagination(PageNumberPagination):
    """课程列表数据的分页器"""
    page_query_param = 'page'
    page_size_query_param = 'page_size'
    page_size = 2
    max_page_size = 10
模型:course/models.py
class Course(BaseModel):
    # ...
    # 连表查询
    @property
    def section_list(self):
        temp_section_list = []

        for chapter in self.coursechapters.all():
            for section in chapter.coursesections.all():
                # 最多需要4条数据
                if len(temp_section_list) >= 4:
                    return temp_section_list
                temp_section_list.append({
                    'free_trail': section.free_trail,
                    'name': section.name
                })
        return temp_section_list
序列化:course/serializers.py
from rest_framework.serializers import ModelSerializer

from . import models

class CategoryModelSerializer(ModelSerializer):
    class Meta:
        model = models.CourseCategory
        fields = ('id', 'name')

class TeacherModelSerializer(ModelSerializer):
    class Meta:
        model = models.Teacher
        fields = ('name', 'role', 'title', 'signature', 'image', 'brief')

class CourseModelSerializer(ModelSerializer):
    teacher = TeacherModelSerializer()
    class Meta:
        model = models.Course
        fields = (
            'id',
            'name',
            'course_img',
            'brief',
            'period',
            'attachment_path',
            'students',
            'sections',
            'pub_sections',
            'price',
            'teacher',
            'section_list',
        )
01-10 22:26