我正在使用python 2.7和django 1.7构建API,我遇到了问题。我不是Rest Framework的专家,但我理解基本机制。
我可以举个例子来恢复我的问题。我有一条路线可以说
/api/project/
Django Rest Framework为我提供了这条路线的所有基本操作,我不需要写它们,例如:
POST, GET, PUT, DELETE => /api/project/
事实是,我想在创建新项目时进行一些操作。我想添加创建新项目的用户的ID。
我想在create function中添加一些触发/回调:
class ProjectViewSet(viewsets.ModelViewSet):
queryset = Project.objects.all()
serializer_class = ProjectSerializer
def create(self, request, *args, **kwargs):
我想保留Rest Framework的内部行为(我不想重写路由函数),但我希望路由做额外的事情,我需要触发/回调中的请求对象。像
这样的东西def callback(request, instance):
instance.created_by = request.user
instance.save()
你有什么想法吗?
谢谢。
答案 0 :(得分:1)
您需要将creator_id字段添加到序列化程序以及资源表示的模型。然后你可以在你的视图中做这样的事情: -
import copy
class ProjectViewSet(viewsets.ModelViewSet):
...
def create(self, request, *args, **kwargs):
data = copy.deepcopy(request.data)
data['creator_id'] = request.user.id
request._data = data
return super(ProjectViewSet, self).create(request, *args, **kwargs)