• 对特殊字段进行序列化


    source='get_course_type_display'

      choice字段

    2 source指定

    一对一

    一对多

    3定义一个方法进行for循环取出

      一对多(反向)

      多对多

    from rest_framework import serializers
    from app01.models import *
    
    class CourseSerializers(serializers.ModelSerializer):
        choice字段进行序列化后显示:
        course_type =serializers.CharField(source='get_course_type_display')
        sub_category=serializers.CharField(source='sub_category.name')
        level=serializers.CharField(source='get_level_display')
        status=serializers.CharField(source='get_status_display')
        class Meta:
            model=Course
            fields=['id','name','course_img','course_type','sub_category','level','status',
                    'brief','pub_date','period','order','attachment_path',
                    # ,,,,,,'degree_course'
                    'template_id'
                    ]
    
    class CourseDetailSerializers(serializers.ModelSerializer):
        course=serializers.CharField(source='course.name')
        # 教师
        teachers=serializers.SerializerMethodField()
        # 评论课程
        recommend_courses=serializers.SerializerMethodField()
        # 显示常见问题
        question=serializers.SerializerMethodField()
        brief=serializers.CharField(source='course.brief')
        # coursesubcactegory = serializers.SerializerMethodField()
    
        class Meta:
            model=CourseDetail
            fields=['id','course','hours','course_slogan','video_brief_link','brief',
                    'why_study','what_to_study_brief','career_improvement','prerequisite',
                    'recommend_courses','teachers','question',
                    ]
        # 评论课程
        def get_recommend_courses(self,obj):
            query=obj.recommend_courses.all()
            return [{'name':row.name} for row in query]
        # 老师信息
        def get_teachers(self,obj):
            query=obj.teachers.all()
            return [{'name':row.name,'brief':row.brief,'signature':row.signature} for row in query]
    
        # 常见问题
        def get_question(self,obj):
            query=obj.course.asked_question.all()
            return [{'question':row.question,'answer':row.answer} for row in query]
    
        #取子类(学位课或专题课)
        def get_coursesubcactegory(self,obj):
            query=obj.course.sub_category.coursecategory_set.all()
            return [{'name':row.name} for row in query]

     #实现访问全部数据------------------
            #与单条数据book表增删改查---------

             /books/     -----get            books      -----  返回当前所有数据
             /books/     -----post           books      -----  返回提交数据 
             
             /books/(d+)-----get            bookdetail -----  返回当前查看的单条数据 
             /books/(d+)-----put            bookdetail -----  返回更新数据 
             /books/(d+)-----delete         bookdetail -----  返回空




    #urls.py:

        from django.conf.urls import url
        from django.contrib import admin
        from app01 import views
        
        urlpatterns = [
            url(r'^admin/', admin.site.urls),
            url(r'^Books/$', views.Books.as_view(),name='book'),
            url(r'^Books_detail/(d+)/$', views.Book_detail.as_view(),name='Books_detail'),
            url(r'^Author/$', views.AuthorView.as_view(),name='Author'),
            url(r'^AuthorDetail/(d+)/$', views.perBookView.as_view(),name='AuthorDetail'),
        
        ]
    #views.py:

        from django.shortcuts import render,HttpResponse,redirect
        from app01.serilizer import *
        from django.views import View
        from app01.models import *
        from rest_framework.response import Response
        from rest_framework import serializers
        # Create your views here.
        from rest_framework.views import APIView
        
        
        from rest_framework import mixins
        from rest_framework import generics
        from app01.serilizer import *
        
        class Books(APIView):
            def get(self,request):
                book_list=Book.objects.all()
                bs=BookSerializers(book_list,many=True)
                return Response(bs.data)
        
            def post(self,request):
                bs=BookSerializers(data=request.data)
                if bs.is_valid():
                    bs.save()
                    return Response(bs.data)
                else:
                    return Response(bs.errors)
        class Book_detail(APIView):
            def get(self,request,id):
                obj=Book.objects.filter(pk=id).first()
                bs=BookSerializers(obj)
                return Response(bs.data)
        
            def put(self,request,id):
                obj=Book.objects.filter(pk=id).first()
                bs=BookSerializers(data=request.data)
                if bs.is_valid():
                    bs.save()
                    return Response(bs.data)
                else:
                    return Response(bs.errors)
        
            def delete(self,request,id):
                Book.objects.filter(pk=id).delete()
                return Response()
        
        
        class AuthorView(APIView):
            def get(self,request):
                author_list=Author.objects.all()
                bs=Authorserializers(author_list,many=True)
                return Response(bs.data)
        
            def post(self,request):
        
                ps=Authorserializers(data=request.data)
                if ps.is_valid():
                    print(ps.validated_data)
                    ps.save()  # create方法
                    return Response(ps.data)
                else:
                    return Response(ps.errors)
        
        
        class perBookView(APIView):
            #查看一条
            def get(self,request,id):
                authors_obj=Author.objects.filter(pk=id).first()
                aa=Authorserializers(authors_obj)
                return Response(aa.data)
        
            #更新一条
            def put(self,request,id):
                obj=Author.objects.filter(pk=id).first()
                sobj=Authorserializers(obj,data=request.data)
                if sobj.is_valid():
                    sobj.save()
                    return Response(sobj.data)
                else:
                    return Response(sobj.errors)
        
            #删除一条
            def delete(self,request,id):
                Author.objects.filter(pk=id).delete()
                return Response()




    #serilizer(用于序列化).py:
        from rest_framework import serializers
        from app01.models import *
        class Authorserializers(serializers.ModelSerializer):
            class Meta:
               model=Author
               fields="__all__"
        
        
        class BookSerializers(serializers.ModelSerializer):
            class Meta:
                model=Book
                fields='__all__'

    #models.py:

        from django.db import models
        
        from django.db import models

        class Book(models.Model):
            title=models.CharField(max_length=32)
            price=models.IntegerField()
            pub_date=models.DateField(null=True)
            publish=models.ForeignKey("Publish")
            authors=models.ManyToManyField("Author")
            def __str__(self):
                return self.title
        
        class Publish(models.Model):
            name=models.CharField(max_length=32)
            email=models.EmailField()
            def __str__(self):
                return self.name
        
        class Author(models.Model):
            name=models.CharField(max_length=32)
            age=models.IntegerField()
            def __str__(self):
                return self.name








  • 相关阅读:
    老罗的OLLYMACHINE
    VGA寄存器一览表
    常用的I/O地址
    使用VESA示例
    打开A20
    Linux 2.2 Framebuffer Device Programming Tutorial
    Linux驱动
    基于Linux核心的汉字显示的尝试
    汉字的动态编码与显示方案
    AT&T语法(一)
  • 原文地址:https://www.cnblogs.com/wanghuaqiang/p/9209508.html
Copyright © 2020-2023  润新知