模型 图书和作者是多对多关系
class Book(models.Model):book_name=models.CharField(max_length=40)price=models.DecimalField(max_digits=4,decimal_places=2)publish=models.ForeignKey(to="Publish",on_delete=models.CASCADE,related_name="publish")author=models.ManyToManyField(to="Author",related_name="author")class Meta:db_table="tbl_book"# def __str__(self):# return self.book_nameclass Publish(models.Model):publish_name=models.CharField(max_length=20)address=models.CharField(max_length=30)class Meta:db_table="tbl_publish"# def __str__(self):# return self.publish_nameclass Author(models.Model):sex_choices=[(0,"男"),(1,"女")]name=models.CharField(max_length=20,unique=True)phone=models.BigIntegerField()sex=models.IntegerField(choices=sex_choices)class Meta:db_table="tbl_author"# def __str__(self):# return self.name
序列化器:
class SerBook(serializers.ModelSerializer):""" add(1) add(1,2), set(list_object), remove(1), remove(1,2) or remove(*[1,2])"""#publish = serializers.PrimaryKeyRelatedField(queryset=Publish.objects.all())#author = serializers.PrimaryKeyRelatedField(allow_empty=False, many=True, queryset=Author.objects.all())class Meta:model=Bookfields="__all__"class SerPublish(serializers.ModelSerializer):class Meta:model = Publishfields = "__all__"class SerAuthor(serializers.ModelSerializer):class Meta:model = Authorfields = "__all__"
视图以图书为例:
class BookView(APIView):def get(self,request,*args,**kwargs):pk= kwargs.get("id")if pk :inst = Book.objects.filter(id=kwargs.get("id")).first()if inst:ser = SerBook(instance=inst, many=False)return Response(data=ser.data, status=200)else:return Response(data={"msg": "not found", "data": []}, status=200)else:inst = Book.objects.all()ser = SerBook(instance=inst, many=True)return Response(data=ser.data, status=200)def post(self,request,*args,**kwargs):data=request.datamany=Falseif isinstance(data,list):many=Trueser = SerBook(data=data, many=many)if ser.is_valid():ser.save()return Response(data=ser.data, status=status.HTTP_200_OK)else:return Response(data=ser.errors, status=status.HTTP_404_NOT_FOUND)def put(self,request,*args,**kwargs):data=request.datapk=kwargs.get("id")if pk :inst=Book.objects.filter(id=pk).first()print(Book.objects.filter(id=pk).values().first(),"xxxx")if inst:ser = SerBook(instance=inst, many=False,data=data)if ser.is_valid():ser.save()return Response(data=ser.data, status=200)<br>
序列化器结构:
postman测试:
创建单个图书:
PUT 修改图书根据图书book id:
多对多删除:
def delete(self,request,*args,**kwargs):pk= kwargs.get("id")data=request.dataif pk:inst=Book.objects.filter(id=pk).first()if inst:inst.delete()return Response(data={"code":200,"msg":"删除ok"})else: return Response(data={"code":404,"msg":"删除失败,不存在!"})else:ids=data.get("ids")if isinstance(ids,list):objs=Book.objects.filter(id__in=ids)objs.delete()return Response(data={"code":200,"msg":"删除ok"})
批量删除:
本次分享到此结束,感谢大家的阅读!