在通过序列化器 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 框架序列化器