在通过序列化器 django rest 框架时传递额外的数据

Posted

技术标签:

【中文标题】在通过序列化器 django rest 框架时传递额外的数据【英文标题】:Passing extra data while passing through serializer django rest framework 【发布时间】: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 代码。 【参考方案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', '')

以上是关于在通过序列化器 django rest 框架时传递额外的数据的主要内容,如果未能解决你的问题,请参考以下文章

Django Haystack 结果到 Django Rest 框架序列化器

Django Rest 框架嵌套序列化器

django rest 框架模型序列化器 - 读取嵌套,写入平面

django rest框架嵌套模型序列化器

Django Rest框架:序列化程序上的共享字段

如何从序列化器字段订购 django rest 框架查询集?