zoukankan      html  css  js  c++  java
  • 路飞-课程详情页后台

    详情页后台

    路由:source/urls.py
    re_path("(?P<pk>d+)/", views.CourseRetrieveAPIView.as_view()),
    path("chapters/", views.CourseChapterListAPIView.as_view()),
    
    视图:source/views.py
    from .models import Course
    from .models import CourseChapter
    from rest_framework.generics import ListAPIView
    from rest_framework.generics import RetrieveAPIView
    from . import serializers
    from django_filters.rest_framework.backends import DjangoFilterBackend
    
    class CourseRetrieveAPIView(RetrieveAPIView):
        """课程详情信息"""
        queryset = Course.objects.filter(is_delete=False, is_show=True)
        serializer_class = serializers.CourseRetrieveModelSSerializer
    
    class CourseChapterListAPIView(ListAPIView):
        """课程详情信息"""
        queryset = CourseChapter.objects.filter(is_delete=False, is_show=True).order_by("chapter")
        serializer_class = serializers.CourseChapterModelSerializer
        filter_backends = [DjangoFilterBackend]
        filter_fields = ['course', ]
    
    序列化:source/serializers.py
    from . import models
    from rest_framework.serializers import ModelSerializer
    class CourseRetrieveModelSSerializer(ModelSerializer):
        # 课程详情的序列化器
        teacher = TeacherSerializer()
        class Meta:
            model = models.Course
            fields = ["id", "name", "course_img", "students", "sections", "pub_sections", "price", "teacher", "level_name"]
    
    class CourseSessionModelSerializer(ModelSerializer):
        class Meta:
            model = models.CourseSection
            fields = ["id", "name", "duration", "free_trail", "orders"]
    
    class CourseChapterModelSerializer(ModelSerializer):
        coursesections = CourseSessionModelSerializer(many=True)
    
        class Meta:
            model = models.CourseChapter
            fields = ["chapter", "name", "summary", "coursesections"]
    
    视图字段:source/model.py
    class Course(BaseModel):
        # ...
        @property
        def level_name(self):
            # 难度名
            return self.level_choices[self.level][1]
    
  • 相关阅读:
    内向者生存手册
    不良言论屏蔽方案探讨——附加一点思考
    提高复用性的编码习惯
    如何管好.net的内存
    谨防信息超载
    .net的反对派们,精神比表面的东西更重要
    为什么我老是半途而废?
    对不起,我也是来给.Net泼冷水的(山寨版)
    把重要的事情先做好
    学英语(外语)的一个误区
  • 原文地址:https://www.cnblogs.com/DcentMan/p/11844751.html
Copyright © 2011-2022 走看看