搭建网站的流程,网站推广平台搭建,二次网站开发平台, 163com免费邮箱登文章目录 1 检查ModelSerializer2 指定要包含的字段3 指定嵌套序列化4 显式指定字段5 指定只读字段6 其他关键字参数7 关系字段8 自定义字段映射.serializer_field_mapping.serializer_related_fieldserializer_url_field.serializer_choice_field 通常#xff0c;您会想要与D… 文章目录 1 检查ModelSerializer2 指定要包含的字段3 指定嵌套序列化4 显式指定字段5 指定只读字段6 其他关键字参数7 关系字段8 自定义字段映射.serializer_field_mapping.serializer_related_fieldserializer_url_field.serializer_choice_field 通常您会想要与Django Model 定义紧密映射的
Serializer 类。 ModelSerializer 类提供了一个快捷方式使用该快捷方式可以自动创建具有与Model字段对应的字段的 Serializer 类别。
ModelSerializer 类与常规 Serializer 类相同不同之处在于 它将根据模型自动为您生成一组字段。 它将自动为序列化程序生成验证器例如 unique_together 验证器。 它包括.create和.update的简单默认实现。
声明ModelSerializer如下所示
class AccountSerializer(serializers.ModelSerializer):class Meta:model Accountfields [id, account_name, users, created]默认情况下类上的所有模型字段都将映射到相应的序列化程序字段。
模型上的任何关系如外键都将映射到 PrimaryKeyRelatedField。默认情况下不包括反向关系除非按照序列化程序关系文档中的指定显式包括反向关系。
1 检查ModelSerializer
序列化程序类生成有用的详细表示字符串使您能够完全检查其字段的状态。当使用 ModelSerializers 时这一点尤其有用因为在ModelSerializers中您需要确定自动为您创建的字段和验证器集。
要做到这一点请使用 python manage.py shell 打开 Django shell然后导入序列化程序类实例化它并打印对象表示… from myapp.serializers import AccountSerializerserializer AccountSerializer()print(repr(serializer))
AccountSerializer():id IntegerField(labelID, read_onlyTrue)name CharField(allow_blankTrue, max_length100, requiredFalse)owner PrimaryKeyRelatedField(querysetUser.objects.all())2 指定要包含的字段
如果只希望在模型序列化程序中使用默认字段的子集可以使用 fields 或 exclude 选项就像使用 ModelForm 一样。强烈建议您使用 fields 属性显式设置应序列化的所有字段。这将在模型更改时无意中暴露数据的可能性降到最低。
例如
class AccountSerializer(serializers.ModelSerializer):class Meta:model Accountfields [id, account_name, users, created]您还可以将 fields 属性设置为特殊值 __all__以指示应使用模型中的所有字段。
例如
class AccountSerializer(serializers.ModelSerializer):class Meta:model Accountfields __all__可以用 exclude 属性指定要从序列化程序中排除的字段列表。 例如
class AccountSerializer(serializers.ModelSerializer):class Meta:model Accountexclude [users]3 指定嵌套序列化
默认的ModelSerializer将主键用于关系但也可以使用深度选项轻松生成嵌套表示
class AccountSerializer(serializers.ModelSerializer):class Meta:model Accountfields [id, account_name, users, created]depth 1depth选项应设置为一个整数值该整数值指示在恢复为平面表示之前应遍历的关系的深度。
如果您想自定义序列化的完成方式您需要自己定义字段。
4 显式指定字段
您可以向 ModelSerializer 添加额外的字段或者通过在类上声明字段来覆盖默认字段就像对 Serializer 类一样。
class AccountSerializer(serializers.ModelSerializer):url serializers.CharField(sourceget_absolute_url, read_onlyTrue)groups serializers.PrimaryKeyRelatedField(manyTrue)class Meta:model Accountfields [url, groups]额外字段可以对应于模型上的任何属性或可调用字段。
5 指定只读字段
您可能希望将多个字段指定为只读字段。您可以使用快捷方式Meta选项 read_only_fields而不是使用 read_onlyTrue 属性显式添加每个字段。
此选项应该是字段名称的列表或元组声明如下
class AccountSerializer(serializers.ModelSerializer):class Meta:model Accountfields [id, account_name, users, created]read_only_fields [account_name]默认情况下editableFalse 设置的模型字段和 AutoField 字段将设置为只读不需要添加到 read_only_fields 选项中。
6 其他关键字参数
还有一个快捷方式允许您使用 extra_kwargs 选项在字段上指定任意附加的关键字参数。与read_only_fields的情况一样这意味着您不需要在序列化程序上显式声明字段。
此选项是一个字典将字段名映射到关键字参数的字典。例如
class CreateUserSerializer(serializers.ModelSerializer):class Meta:model Userfields [email, username, password]extra_kwargs {password: {write_only: True}}def create(self, validated_data):user User(emailvalidated_data[email],usernamevalidated_data[username])user.set_password(validated_data[password])user.save()return user请记住如果字段已经在序列化程序类上显式声明那么 extra_kwargs 选项将被忽略。
7 关系字段
在序列化模型实例时可以选择多种不同的方式来表示关系。ModelSerializer 的默认表示形式是使用相关实例的主键。 替代表示法包括使用超链接序列化、序列化完整嵌套表示法或使用自定义表示法序列化。 有关完整的详细信息请参阅序列化程序关系文档。
8 自定义字段映射
ModelSerializer类还公开了一个API您可以重写该API以便在实例化序列化程序时更改自动确定序列化程序字段的方式。
通常如果ModelSerializer默认情况下不生成所需的字段则应将它们显式添加到类中或者仅使用常规Serializer类。但是在某些情况下您可能希望创建一个新的基类该基类定义如何为任何给定的模型创建序列化程序字段。
.serializer_field_mapping
Django模型字段到REST框架序列化程序字段的映射。您可以覆盖此映射以更改应用于每个模型字段的默认序列化程序字段。
.serializer_related_field
此属性应该是序列化程序字段类默认情况下用于关系字段。
对于 ModelSerializer这默认为serializers.PrimaryKeyRelatedField。
对于 HyperlinkedModelSerializer这默认为 serializers.HyperlinkedRelatedField。
serializer_url_field
应用于序列化程序上任何 url 字段的序列化程序字段类。
默认为 serializers.HyperlinkedIdentityField
.serializer_choice_field
应用于序列化程序上的任何 choice 字段的序列化. 默认为 serializers.ChoiceField