pyhton django rest_framework中的ModelViewSet

serializer.py
#基于序列化器做的数据
class Bookserializers(serializers.ModelSerializer):
    class Meta:
        model=Book
        # 排除某一个字段 其他字段全部序列化exclude=[]
        # 修改选项参数extra_kwargs={
        #
        # }
        # 指定那些字段进行序列化read_only_fields=[]
        fields="__all__"
        # fields=[]


#反序列化
class Bookserializer(serializers.Serializer):
    title = serializers.CharField(max_length=64,required=True,label='标题')
    price = serializers.IntegerField(required=True)
    color = serializers.CharField(max_length=64,required=False)
    page_num = serializers.IntegerField(required=False)
    create_pepole=serializers.CharField(max_length=45,required=False,label='创建人')


    def validated_btitle(self,value):
        #单个字段进行校验
        if 'title' not  in value.lower():
            raise serializers.ValidationError("title属性校验不通过")
        return  value
    def validate(self, attrs):
        #多个字段进行校验以及联合校验
        attrs['title']='title'
        return attrs
#笔记:====序列化
# 序列化时字段可以比数据库中的字段要多,但是字段名字要与数据库中的名字保持一致
# 序列化关联数据库时,    serializers.PrimaryKeyRelatedField(label='',queryset='模型名称中查询数据库的方法',read_only=True)
# 其中read_only=True 序列化输出,PrimaryKeyRelatedField默认是将模型进行关联
# serializers.StringRelatedField 默认是将关联模型中__str__方法返回值序列化输出
# serializers.(另一个模型的序列化) 默认是将另一个模型中的字段全部序列化
# 在关联表中进行使用 (在上面三种情况中任选其一 其中属性可以根据自己项目的实际情况进行更改 比如read_only
# )
# 反序列化
# 拿到前段传过来的数据(序列化模型名(data=data))》》进行校验(is_valid())》再进行validated_data
views.py

class  bookModelViewSet(ModelViewSet):
    '''终极ModelViewSet'''
    serializer_class = Bookserializer
    queryset = Book.objects.all()
    #以上代码 实现了普通的增删改查
    #定义自己的方法
    @action(methods=['get'],detail=False)
    # action 解决路由问题 用DefaultRouter生成标准路由
    def  latest(self,request):
        '''自定义的方法'''
        book= Book.objects.latest('id')
        serializer=self.get_serializer(book)
        return Response(serializer.data)

    @action(methods=['put'],detail=True)
    def read(self, request,pk):
        book = self.get_object()
        book.price=request.data.get('bread')
        book.save()
        serializer = self.get_serializer(book)
        return Response(serializer.data)

urls.py

# 只能结合视图集(即只有ModelViewSet)才能自动生成路由
urlpatterns=[
routers=DefaultRouter()
routers.register(r'books/',views.bookModelViewSet)
urlpatterns +=routers.urls
]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小赖同学啊

跟着大师走,路不会太差

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值