モデルクラスのシリアライザ
私たちは、シリアライザを使用したい場合はDjangoのモデルクラスに対応して、DRFは私たちを提供ModelSerializerモデルクラスの私たちはすぐにシリアライザクラスを作成するためのシリアライザを。
ModelSerializer従来のシリアライザ同じですが、用意されています。
- 自動的シリーズベースのモデルクラスのフィールドを生成します
- シリアライザ自動的にモデルクラスに基づいて生成
validators
など、unique_together
- これは、デフォルトが含ま
create()
とupdate()
実装を
第二に、定義
例えば、我々は、作成しますBookInfoSerializer
class BookInfoSerializer(serializers.ModelSerializer):
"""图书数据序列化器"""
class Meta:
model = BookInfo #指明参照模型类
fields = '__all__' #指明为模型类的哪些字段生成
私たちはできるpython manage.py shell
自動的に生成された参照のBookInfoSerializer
具体的な実現
>>> from booktest.serializers import BookInfoSerializer
>>> serializer = BookInfoSerializer()
>>> serializer
BookInfoSerializer():
id = IntegerField(label='ID', read_only=True)
btitle = CharField(label='名称', max_length=20)
bpub_date = DateField(allow_null=True, label='发布日期', required=False)
bread = IntegerField(label='阅读量', max_value=2147483647, min_value=-2147483648, required=False)
bcomment = IntegerField(label='评论量', max_value=2147483647, min_value=-2147483648, required=False)
image = ImageField(allow_null=True, label='图片', max_length=100, required=False)
第三に、指定したフィールド
使用するfields
フィールドをクリアするには、__all__
テーブル名は、以下のような、特定のフィールドを示すことができ、すべてのフィールドを、含まれています
class BookInfoSerializer(serializers.ModelSerializer):
"""图书数据序列化器"""
class Meta:
model = BookInfo
fields = ('id', 'btitle', 'bpub_date')
使用exclude
明確な放電を取り除くためにフィールド
class BookInfoSerializer(serializers.ModelSerializer):
"""图书数据序列化器"""
class Meta:
model = BookInfo
exclude = ('image',)
ディスプレイは、フィールドを示すように、
class HeroInfoSerializer(serializers.ModelSerializer):
hbook = BookInfoSerializer()
class Meta:
model = HeroInfo
fields = ('id', 'hname', 'hgender', 'hcomment', 'hbook')
示すのみフィールドを読み取ることによって、read_only_fields
フィールドのようなフィールドのみ、出力の配列のみを、読み取り示し
class BookInfoSerializer(serializers.ModelSerializer):
"""图书数据序列化器"""
class Meta:
model = BookInfo
fields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment')
read_only_fields = ('id', 'bread', 'bcomment')
第四に、追加のパラメータ
我々は使用することができますextra_kwargs
するためのパラメータをModelSerializer
既存のオプション・パラメータを追加または変更します
class BookInfoSerializer(serializers.ModelSerializer):
"""图书数据序列化器"""
class Meta:
model = BookInfo
fields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment')
extra_kwargs = {
'bread': {'min_value': 0, 'required': True},
'bcomment': {'min_value': 0, 'required': True},
}
# BookInfoSerializer():
# id = IntegerField(label='ID', read_only=True)
# btitle = CharField(label='名称', max_length=20)
# bpub_date = DateField(allow_null=True, label='发布日期', required=False)
# bread = IntegerField(label='阅读量', max_value=2147483647, min_value=0,
required=True)
# bcomment = IntegerField(label='评论量', max_value=2147483647, min_value=0, required=True)