Django的Serializer和ModelSerializer

举报
时光不写 发表于 2022/02/22 19:22:31 2022/02/22
【摘要】 ModelSerializer先使用ModelSerializer测试一下结果,例:# models.py######from django.db.models import Model, CharField, BooleanField, ForeignKeyclass TestModel(User): name = CharField(max_length=64, name='na...

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。