python - Django-rest-framework 如何向 request.data 添加其他数据
问题描述
我正在使用 DRF 和令牌认证系统来处理 API。每当我从客户端发送数据时,它都会发送三个必填字段中的两个:title
和name
. 但在后端created_by
给出。request.user
所以我需要以下内容,当然不能按预期工作:
class DefaultViewSet(viewsets.ModelViewSet):
"""
API endpoint
"""
queryset = Default.objects.all().order_by('-updated_at')
serializer_class = DefaultSerializer
permission_classes = [permissions.IsAuthenticated]
filterset_fields = ['created_by', 'title', 'name']
def create(self, request, *args, **kwargs):
request.data['created_by'] = request.user.id
super().create(request, *args, **kwargs)
由于我无法更改request.data
对象,因此我应该完全覆盖create
方法。因此,没有简单的方法来做前面的事情,对吧?还是有?
解决方案
您应该覆盖perform_create
调用序列化程序的保存方法的方法,并按照文档所述发送其他关键字参数:
def perform_create(self, serializer):
request = serializer.context['request']
serializer.save(created_by=request.user.id)
原来的方法是:
def perform_create(self, serializer):
serializer.save()
推荐阅读
- css - 如何使用 CSS 相对于标题定位我的元素
- flutter - 颤振:从颤动的列表视图中删除带有删除图标的小部件
- flutter - 在有像 1,00,000 这样的大量孩子的列表视图中使用 AutomaticKeepAliveClientMixin 是否很好?
- javascript - 如何在 Javascript/Vue 中创建双 IF 条件?
- javascript - 我想在 ReactJs 的 onClick 中有 2 种方法,但它不起作用
- reactjs - 在 React 中使用 Slick.js 与“infinite: true”,幻灯片被渲染多次
- css - 如何删除活动选项卡下的边框
- rest - 如何在 Insomnia 上禁用主机名验证
- java - 使用给定的模数和指数加密字符串
- c++ - 绘制许多矩形时开罗性能极差(C++,gtkmm)