【问题标题】:Passing extra data while passing through serializer django rest framework在通过序列化器 django rest 框架时传递额外的数据
【发布时间】:2018-01-11 11:24:35
【问题描述】:

我希望在序列化程序中传递额外的数据,但无法这样做。下面是我的代码 视图.py

device_id = request.META.get('HTTP_DEVICE', '')
user_data = request.data
serializer = UserSerializer(data=user_data)

我也想通过 user_data 传递设备 ID。我尝试了字典,但没有获取数据。建议语法

【问题讨论】:

  • 请发布您的 UserSerializer 代码。

标签: python django api serialization django-rest-framework


【解决方案1】:

您可以将上下文传递给您的序列化程序,例如:

serializer = UserSerializer(data=request.data, context={'YOUR_CONTEXT': CONTEXT_OBJ})

然后在您的验证方法中获取它,例如:

    def validate(self, data):
        CONTEXT_OBJ = self.context.get('YOUR_CONTEXT')
        ...

希望对你有帮助!

祝你好运!

【讨论】:

    【解决方案2】:

    您的问题缺少有关您的模型声明或序列化程序的任何实质性细节。但是,这看起来仍然是错误的。你不应该做这样的事情。

    相反,您的模型应该是这样的

    class User(model):
    
         # declarations of id, account_name, HTTP_DEVICE, etc.
    

    然后是你的序列化器,

    class UserSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = User
            fields = ('id', 'HTTP_DEVICE', 'account_name')
    

    然后,序列化程序将拥有所有这些字段。

    请参考django rest framework documentation.

    【讨论】:

    • 我已经完全按照你说的方式得到了一切,只需要知道如何将 device_id 和 user_data 都传递到序列化程序中。试过这样的字典,但没有用。 queryset = {'user_data': request.data, 'device_id': request.META.get('HTTP_DEVICE', '')}
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2021-11-02
    • 2015-06-29
    • 2016-03-23
    • 2017-06-26
    • 1970-01-01
    相关资源
    最近更新 更多