Skip to main content
 首页 » 编程设计

python之在将数据传递给序列化器 django api 时添加额外的上下文

2025年05月04日33sky-heaven

我正在尝试使用 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)