diff --git a/rest_framework/request.py b/rest_framework/request.py index 7e4daf2749..5cd1ceaa88 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -153,6 +153,12 @@ class Request(object): def __init__(self, request, parsers=None, authenticators=None, negotiator=None, parser_context=None): + # If we're being passed our own Request object, unwrap the underlying + # HttpRequest. This allows for some backwards compatibilty to 3.7.3 + # for select users who carefully reuse ViewSets. + if isinstance(request, Request): + request = request._request + assert isinstance(request, HttpRequest), ( 'The `request` argument must be an instance of ' '`django.http.HttpRequest`, not `{}.{}`.' diff --git a/tests/test_request.py b/tests/test_request.py index 76589a4401..6071e58772 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -33,10 +33,13 @@ def test_request_type(self): message = ( 'The `request` argument must be an instance of ' - '`django.http.HttpRequest`, not `rest_framework.request.Request`.' + '`django.http.HttpRequest`, not `NoneType`.' ) with self.assertRaisesMessage(AssertionError, message): - Request(request) + Request(None) + + other_request = Request(request) + assert other_request._request is request._request class PlainTextParser(BaseParser):