栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django rest framework之ModelSerializer 笔记(二)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django rest framework之ModelSerializer 笔记(二)

嵌套的序列化关系复杂了,默认的ModelSerializer的 .create() 和 .update() 方法是不支持nested representations的。所以REST framework 3要求你针对nested representations自己写专门的方法。
一个替代方案是“在模型管理器类中保存相关实例”。


处理多个对象
  • Serializing multiple objects
    设置many=true
queryset = Book.objects.all()
serializer = BookSerializer(queryset, many=True)
serializer.data

使用context可以添加其它字段,.to_representation()方法通过self.context属性访问。

serializer = AccountSerializer(account, context={'request': request})
serializer.data

ModelSerializer

快速建立相关模型的serializer 模型

  1. 自动产生基于模型的fileds
  2. 自动产生验证器,比如unique_together验证器
  3. 默认包含create和uodate方法
    外键被映射为PrimaryKeyRelatedField.
class AccountSerializer(serializers.ModelSerializer):
    class meta:
 model = Account
 fields = ('id', 'account_name', 'users', 'created')

检查modelserializer

python manage.py shell
>>> from myapp.serializers import AccountSerializer
>>> serializer = AccountSerializer()
>>> print(repr(serializer))
AccountSerializer():
    id = IntegerField(label='ID', read_only=True)
    name = CharField(allow_blank=True, max_length=100, required=False)
    owner = PrimaryKeyRelatedField(queryset=User.objects.all())

显示哪些字段

fields = ('id', 'account_name', 'users', 'created')
 fields = '__all__'
exclude = ('users',)
Specifying nested serialization

ModelSerializer默认使用关联模型的主要关键字,指明depth可以得到更多

class AccountSerializer(serializers.ModelSerializer):
    class meta:
 model = Account
 fields = ('id', 'account_name', 'users', 'created')
 depth = 1
自定义字段

在serilaizer里面指定对应的函数,source='get_absolute_url',

class AccountSerializer(serializers.ModelSerializer):
    url = serializers.CharField(source='get_absolute_url', read_only=True)
    groups = serializers.PrimaryKeyRelatedField(many=True)

    class meta:
 model = Account
Specifying read only fields

设置了editable=False和AutoField字段的默认是read-only.

read_only_fields = ('account_name',)

注意:即使read-only对象又unique_together限制,这时Providing both the read_only=True and default=… keyword arguments.

serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault())
附加关键字参数

与read_only_fields一样,这意味着您不需要在串行器上显式声明该字段。
将字段名称映射到关键字参数的字典。

extra_kwargs = {'password': {'write_only': True}}
关联字段

替代表示:使用超链接进行序列化,序列化完整的嵌套表示,或使用自定义表示序列化。

Customizing field mappings

通常,如果一个ModelSerializer没有生成默认情况下需要的字段,那么您应该将它们明确地添加到类中,或者直接使用常规的Serializer类。 但是在某些情况下,您可能需要创建一个新的基类,定义如何为任何给定的模型创建序列化程序字段。

  • .serializer_field_mapping
  • .serializer_related_field
  • serializer_url_field
  • serializer_choice_field
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/223419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号