您现在的位置是:首页 > 文章详情

Serializer和ModelSerializer

日期:2019-08-19点击:568

ModelSerializer

  • 先使用ModelSerializer测试一下结果,例:

    # models.py
    ######
    from django.db.models import Model, CharField, BooleanField, ForeignKey
    
    class TestModel(User):
        name = CharField(max_length=64, name='name')
    
    class TestModel(Model):
        status = BooleanField(default=False, name='status')
        user = ForeignKey(User, db_column="user_id", name='user', on_delete=CASCADE,
                                 related_name="user_test")
    
    ######
    
    # seriailzer.py
    ######
    from models import TestModel
    from rest_framework.serializers import ModelSerializer, IntegerField, Serializer
    from rest_framework.serializers import SerializerMethodField
    
    class TestSerializer(ModelSerializer):
        user = IntegerField(required=False)
        status = SerializerMethodField()
      
        class Meta:
            model = TestModel
            fields = ("id", "status", "uesr")
      
  • 把外键user设置为了非必填,但是现在去调用post接口就会发现user依然是必填的,会提示

    {
        "detail": "This field is required.",
        "sub_detail": {
            "user": [
                "This field is required."
            ]
        }
    }

Serializer

  • 再使用Serializer测试一下结果。
  • 代码就不在贴了,直接把serializer.py文件中的class TestSerializer(ModelSerializer):改为class TestSerializer(Serializer):就可以了
  • 这时就会发现再次调用接口就不会再出现问题了

区别

  • ModelSerializer类和Serializer类大致一样,不过添加了一些功能,可以更加便捷的去校验model中的数据.
  • ModelSerializer会基于 model 自动创建一些字段
  • ModelSerializer会自动生成一些验证,比如 unique_together 验证.
  • ModelSerializer包含简单的默认的 create()update().

参考链接:时光不写博客-Serializer和ModelSerializer

原文链接:https://yq.aliyun.com/articles/715218
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章