gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:56 27 4
gpt4 key购买 nike

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

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

我正在使用 Django Rest FrameworkListCreateAPIView 来处理请求:

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'] 详细信息:including-extra-context , 默认情况下它添加在 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')

关于python - 如何在 Django Rest Framework 序列化程序中访问通过 POST 请求发送的额外数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47015498/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com