Django Rest Framework:来自请求的默认外键值

时间:2015-04-23 10:21:21

标签: django foreign-keys django-rest-framework

用户属于 Office 用户可以创建联系人联系属于 Office

我希望联系人的office_id默认为当前用户的办公室。

目前,我这样做的方法是重写ModelViewSet创建方法:

在我的views.py

def create(self, request):
    contact_data = request.data
    contact_data['office'] = request.user.userprofile.office.id # This is the only line I added
    serializer = self.get_serializer(data=contact_data)
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

但是这种方法并不是很正确,而且它的功能很多。知道如何以更好的方式实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

你可以挂钩.perform_create

def perform_create(self, serializer):
    serializer.save(office=self.request.user.userprofile.office.id)

但您可能还必须将office中的serializer字段更改为required=False,以使其通过.is_valid

另一种解决方案是更改request.data,然后调用create方法:

def create(self, request, *args, **kwargs):
    request.data['office'] = request.user.userprofile.office.id
    return super(ViewClassName, self).create(request, *args, **kwargs)