用户属于 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)
但是这种方法并不是很正确,而且它的功能很多。知道如何以更好的方式实现这一目标吗?
答案 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)