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