Django的Serializer和ModelSerializer

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()

本文链接:时光不写博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Django提供了多种序列化器来序列化多表数据,其最常用的是ModelSerializer。 首先,你需要在你的serializers.py文件导入ModelSerializer, models和serializers模块: ```python from django.db import models from rest_framework import serializers from .models import Model1, Model2 ``` 然后,你需要在serializers.py文件定义你的ModelSerializer类,它将包含你要序列化的多个模型。例如,如果你要序列化Model1和Model2两个模型,可以按照以下方式编写一个ModelSerializer类: ```python class Model1Serializer(serializers.ModelSerializer): class Meta: model = Model1 fields = '__all__' class Model2Serializer(serializers.ModelSerializer): class Meta: model = Model2 fields = '__all__' ``` 现在,你可以使用这些序列化器来将多个模型序列化为JSON等格式。例如,如果你要将Model1和Model2两个模型的数据序列化为JSON格式,可以按照以下方式编写一个视图: ```python from rest_framework.generics import ListAPIView class ModelListAPIView(ListAPIView): queryset = Model1.objects.all() serializer_class = Model1Serializer ``` 在这个视图,我们使用了Model1Serializer来序列化Model1模型的数据。如果你想序列化Model2模型的数据,只需要将serializer_class属性设置为Model2Serializer即可。 同时,你也可以使用NestedSerializer来实现多表序列化。例如,如果你要序列化一个包含Model1和Model2的对象,可以按照以下方式编写一个NestedSerializer: ```python class Model2Serializer(serializers.ModelSerializer): class Meta: model = Model2 fields = '__all__' class Model1Serializer(serializers.ModelSerializer): model2 = Model2Serializer(many=True) class Meta: model = Model1 fields = '__all__' ``` 在这个NestedSerializer,我们在Model1Serializer定义了一个model2字段,并将其设置为Model2Serializer。这将允许我们序列化Model1和Model2两个模型的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

时光不写代码

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值