如何在 Django Rest Framework 序列化器中访问通过 POST 请求发送的额外数据

2024-04-19

我正在尝试发送一个额外的数组POST创建组的请求。

POST /groups/
{
  "name": “New Group“,
  "users_to_invite": [ 1, 2, 6 ]
}

我在用着Django Rest Framework's ListCreateAPIView处理请求:

class GroupListView(ListCreateAPIView):
    queryset = Group.objects.all()

    def get_serializer(self, *args, **kwargs):
        kwargs['context'] = self.get_serializer_context()

        # Use a dedicated serializer to inspect the field with users to invite
        if self.request.method == 'POST':
            return GroupCreateSerializer(*args, **kwargs)
        return GroupSerializer(*args, **kwargs)

我想了解 的内容users_to_invite序列化器中的数组来创建邀请对象。但是,我无法这样做,因为当我在序列化器中访问它时,该数组不存在。

class GroupCreateSerializer(ModelSerializer):

    def create(self, validated_data):
        # Get user ids to invite
        # !! It fails here !!
        invitations_data = validated_data.pop('users_to_invite')

        # TODO: Iterate over ids and create invitations

        # Create a group
        group = Group.objects.create(**validated_data)
        return group

    class Meta:
        model = Group
        fields = ('id', 'name', )

数组不存在,所以我很自然地收到错误:

File "...my_api/serializers.py", line 303, in create
    invitations_data = validated_data.pop('users_to_invite')
KeyError: 'users_to_invite'

我怎样才能让数组出现在那里?修改模型听起来不是一个好主意,因为我不想存储数组中的内容。


中缺少额外数据validated_data你可以尝试使用self.context['request']细节:包括额外上下文 http://www.django-rest-framework.org/api-guide/serializers/#including-extra-context,默认情况下它添加在获取序列化器 http://www.cdrf.co/3.1/rest_framework.viewsets/ModelViewSet.html#get_serializer观察方法

对于你的情况:

def create(self, validated_data):
    # Get user ids to invite
    # !! It fails here !!
    request = self.context['request']
    invitations_data = request.data.get('users_to_invite')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Django Rest Framework 序列化器中访问通过 POST 请求发送的额外数据 的相关文章

随机推荐