1 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