在将数据传递给序列化程序 django api 时添加额外的上下文 [英] adding an extra context while passing data to serializer django api

查看:23
本文介绍了在将数据传递给序列化程序 django api 时添加额外的上下文的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 request.data 在我的表中添加一个额外的字段 auth_token,但它给出了错误.错误是——data['auth_token_id'] = auth_token类型错误:列表索引必须是整数或切片,而不是 str

I am trying to add an extra field auth_token in my table with the request.data but it is giving errors. The error is - data['auth_token_id'] = auth_token TypeError: list indices must be integers or slices, not str

我的代码如下:

serializers.py

serializers.py

class AppSerializer(serializers.ModelSerializer):

  class Meta:
     model = ThirdPartyApps
     fields = ('app_name', 'package_name', 'auth_token_id')

views.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 添加到我的模型中,但它给出了这个错误 -

I am looking for a way to pass extra data through the serializer. I just want to add auth_token to my model like the request.data but it is giving this error -

data['auth_token_id'] = auth_token类型错误:列表索引必须是整数或切片,而不是 str

推荐答案

你应该像这样将它作为上下文传递:

You should pass it as context like so:

serializers.py

serializers.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')

views.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)

这篇关于在将数据传递给序列化程序 django api 时添加额外的上下文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆