Django REST Framework – pass extra parameter to actions

In case you can’t/don’t want/whatever install drf-nested-routers, you could achieve the same by doing:

@action(detail=True,
        methods=['delete'],
        url_path="contacts/(?P<phone_pk>[^/.]+)")
def delete_phone(self, request, phone_pk, pk=None):
    contact = self.get_object()
    phone = get_object_or_404(contact.phone_qs, pk=phone_pk)
    phone.delete()
    return Response(.., status=status.HTTP_204_NO_CONTENT)

The trick is to put the regex in url_path parameter of the decorator and pass it to the decorated method (avoid using just pk or it will collide with the first pk)

Tested with:

Django==2.0.10
djangorestframework==3.9.0

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)