目录
book表
一、先建好好modelsbook表模型
from django.db import models
# Create your models here.
class Book(models.Model):
name = models.CharField(max_length=32)
price = models.CharField(max_length=32)
publish = models.ForeignKey(to='Publish',
on_delete=models.SET_NULL,
null=True)
authors = models.ManyToManyField(to='Author')
class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=32)
class Author(models.Model):
name = models.CharField(max_length=32)
phone = models.CharField(max_length=11)
author_detail = models.OneToOneField(to='AuthorDetail',
on_delete=models.CASCADE)
class AuthorDetail(models.Model):
email = models.CharField(max_length=32)
age = models.IntegerField()
二、在serialize文件中写继承serializers.ModelSerializer的BookSerializer类
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['name', 'price', 'publish_detail', 'author_list', 'publish', 'authors'] # 自定制的字段,一定要在这里注册一下
extra_kwargs = {
'name': {'max_length': 10, 'required': True},
'publish': {'write_only': True},
'authors': {'write_only': True}
}
publish_detail = serializers.DictField(read_only=True)
author_list = serializers.ListField(read_only=True)
三、在视图view中写BookView类的增删查改
from django.shortcuts import render
# Create your views here.
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Book
from .serializer import BookSerializer
class BookView(APIView):
def get(self, request):
qs = Book.objects.all()
ser = BookSerializer(qs, many=True)
return Response({'code': 100,
'mag': '成功',
'results': ser.data})
def post(self, request):
ser = BookSerializer(data=request.data)
if ser.is_valid():
ser.save()
return Response({'code': 100,
'msg': '成功'})
else:
return Response({'code': 100,
'msg': ser.errors})
class BookDetailView(APIView):
def get(self, request, pk):
book = Book.objects.all().get(pk=pk)
ser = BookSerializer(book)
return Response({'code': 100,
'msg': '成功',
'results': ser.data})
def put(self, request, pk):
book = Book.objects.get(pk=pk)
ser = BookSerializer(data=request.data,instance=book)
if ser.is_valid():
ser.save()
return Response({'code': 100,
'msg': '更新成功'})
else:
return Response({'code': 100,
'msg': ser.errors})