首页 > 解决方案 > Django-rest-framework 如何向 request.data 添加其他数据

问题描述

我正在使用 DRF 和令牌认证系统来处理 API。每当我从客户端发送数据时,它都会发送三个必填字段中的两个:titlename. 但在后端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方法。因此,没有简单的方法来做前面的事情,对吧?还是有?

标签: pythondjango-rest-frameworkdjango-serializer

解决方案


您应该覆盖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()

推荐阅读