django restframework 多对多模型 —— python
模型 图书和作者是多对多关系
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_name class 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_name class 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=Book fields="__all__" class SerPublish(serializers.ModelSerializer): class Meta: model = Publish fields = "__all__" class SerAuthor(serializers.ModelSerializer): class Meta: model = Author fields = "__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.data
many=False
if isinstance(data,list):
many=True
ser = 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.data
pk=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)
序列化器结构:
postman测试:
创建单个图书:
PUT 修改图书根据图书book id:
多对多删除:
def delete(self,request,*args,**kwargs):
pk= kwargs.get("id")
data=request.data
if 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"})
批量删除:
本次分享到此结束,感谢大家的阅读!
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




