python - Django Rest 框架:在视图集中传递上下文
问题描述
视图集很方便,因为我们可以做这样的事情并获得一个完全工作的序列化器:
class StoreObjectViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
permission_classes = [IsAuthenticated]
queryset = StoreObject.active_objects.all()
serializer_class = serializers.StoreObjectSerializer
不幸的是,据我所知,要将上下文传递给序列化程序,我们需要执行以下操作:
PostSerializer(data=request.data, context={'request': request})
这意味着我们需要手动覆盖 ViewSets 提供的每个方便的方法(据我所知)。有没有办法将上下文注入每个序列化程序,同时仍然保持 Viewsets 方便?
解决方案
默认情况下,request
被发送到任何通用视图和视图集。您也可以在GitHub中查看源代码。因此,您不必在每个视图中都注入它们。如果要传递额外的上下文,请覆盖get_serializer_context(...)
方法:
class StoreObjectViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
...
def get_serializer_context(self):
context = super().get_serializer_context()
context['custom_context'] = 'Your custom context'
return context
推荐阅读
- css - 如何使用 webpack 从 .scss 和 .styl 文件创建 .css?
- sql - SQL Server 锁定的 UPDATE 优化
- html - 将 Div 调整为与背景图像相同的尺寸
- node.js - nodejs:无法从主函数中的回调函数读取响应
- angular - 如何在 Angular 应用程序的主项目中使用 Puppeteer?
- amazon-web-services - Lex:服务器在处理 lambda 时遇到错误
- google-sheets - 如何通过几个步骤仅在 Google 表格中复制公式(没有值或格式)?
- java - Android Java将mp3文件名字符串传递给片段内的媒体播放器
- influxdb - InfluxDB Flux 连接系列
- json - 导出包含 JSON 列且没有双重转义的 SQLite 表