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

參考鏈接:時光不寫博客-Serializer和ModelSerializer

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章