【发布时间】:2019-06-06 12:38:05
【问题描述】:
如何更改 DRF Viewset 中自定义操作的默认查找参数? 这是我的视图集(简化)
class InvitationViewSet(MultiSerializerViewSet):
queryset = Invitation.objects.all()
@action(
detail=False,
#url_path='accept-invitation/<str:key>/',
#lookup_field='key'
)
def accept_invitation(self, request, key=None):
invitation = self.get_object()
with legal_invitation(invitation):
serializer = self.get_serializer(invitation)
invitation.accepted = True
invitation.save()
return Response(serializer.data)
我想当用户输入像/invitations/accept-invitation/abccba 这样的url,其中abccba 是一个随机令牌字符串。 key - 是邀请模型中的一个独特字段。我知道我可以设置每个视图集lookup_field='key',但我希望所有其他操作仍然使用默认的lookup_field='pk'。我怎样才能实现我想要的?
【问题讨论】:
-
@dirkgroten 有内置视图集的操作,例如
retrieve、create等。所以我的意思是所有需要detail=True的操作 - 仍然使用pk作为默认搜索值. -
你不能。为它创建一个单独的视图。 ViewSet 中的所有操作共享相同的lookup_field。注意:url 是邀请/{lookup_key}/accept-invitation
标签: python django django-rest-framework