我正在尝试使用 request.data
在我的表中添加一个额外的字段 auth_token 但它给出了错误。错误是 -
数据['auth_token_id'] = auth_token
类型错误:列表索引必须是整数或切片,而不是 str
我的代码如下:
序列化器.py
class AppSerializer(serializers.ModelSerializer):
class Meta:
model = ThirdPartyApps
fields = ('app_name', 'package_name', 'auth_token_id')
View .py
@api_view(['POST'])
def add_apps(request):
data = request.data
auth_token = request.META.get('HTTP_AUTHTOKEN', '')
data['auth_token_id'] = auth_token
serializer = AppSerializer(data=data, many=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors)
我正在寻找一种通过序列化程序传递额外数据的方法。
我只想像 request.data
一样将 auth_token
添加到我的模型中,但它给出了这个错误 -
数据['auth_token_id'] = auth_token
类型错误:列表索引必须是整数或切片,而不是 str
最佳答案
您应该像这样将其作为上下文传递:
序列化器.py
class AppSerializer(serializers.ModelSerializer):
auth_token_id = serializers.SerializerMethodField()
def get_auth_token_id(self, obj):
if "auth_token_id" in self.context:
return self.context["auth_token_id"]
return None
class Meta:
model = ThirdPartyApps
fields = ('app_name', 'package_name', 'auth_token_id')
View .py
@api_view(['POST'])
def add_apps(request):
data = request.data
auth_token = request.META.get('HTTP_AUTHTOKEN', '')
serializer = AppSerializer(data=data, many=True, context = {"auth_token_id": auth_token})
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors)
关于python - 在将数据传递给序列化器 django api 时添加额外的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413919/