serializers.PrimaryKeyRelatedField()是Django REST Framework(DRF)提供的一个序列化字段类

1.serializers.PrimaryKeyRelatedField()是Django REST Framework(DRF)提供的一个序列化字段类,用于在序列化和反序列化过程中处理其他模型之间的关联关系。
该字段类接受一个参数,即关联模型的主键。它将根据这个主键自动序列化和反序列化关联对象。
使用PrimaryKeyRelatedField()可以实现以下功能:
1.序列化:

  1. 在序列化数据时,将关联对象的主键作为字段值返回。
  2. 可以通过设置queryset参数来过滤可选的关联对象集合。
  3. 可以通过设置many=True参数来处理多对多或一对多的关联关系。

2.反序列化:

  1. 在反序列化数据时,会根据传入的主键值创建或更新关联对象。
  2. 可以通过设置queryset参数来限制可用的关联对象集合。
  3. 可以通过设置allow_null参数来允许空值关联。

下面是一个示例,演示如何使用PrimaryKeyRelatedField()进行序列化和反序列化:

from rest_framework import serializers
class ChannelCodeMultiSetTeamSerializer(serializers.Serializer):
    # 当设置write_only=True表明这个是在反序列化并且只希望进行创建和更新操作
    team = serializers.PrimaryKeyRelatedField(
        queryset=Team.objects.all(), required=True, help_text='团队', write_only=True
    )
    channelcodes = serializers.PrimaryKeyRelatedField(
        queryset=ChannelCode.objects.all(), required=True, help_text='活码', write_only=True, many=True
    )

    class Meta:
        fields = '__all__'

在view.py中使用上面的序列化对象

    def multi_set_team(self, request):
        """
        批量设置团队
        对前端穿过来的data进行反序列化
        """
        serializer = ChannelCodeMultiSetTeamSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        ChannelCode.multi_set_team(serializer.validated_data['team'], serializer.validated_data['channelcodes'])
        return DetailResponse()

你可能感兴趣的:(django,python,后端)