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

标签 python django api serialization django-rest-framework

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

相关文章:

c# - 使用 MVC 从数据主体调用 post API

python - Selenium Chrome 选项和功能

django - 我可以告诉一下django TestClient是否正在调用 View 吗

python - 如何使用 Softlayer Python API 重新启动虚拟机

javascript - HTTP 请求的嵌入式凭据替代方案

python - django 序列化程序查询数据库的外键 ID

c++ - Gedit 如何将其 api 暴露给 python 以供插件使用?

python - Plotly:如何为 create_displot 图添加均值和标准差?

python - 如何在 python 中将字符串与二进制值连接起来?

python - 如何在 forms.Form 子类上动态设置 models.ModelChoiceField 的查询集