Django-rest-framework: APIRequestFactory returns WSGIRequest objects

Created on 25 Aug 2016  路  5Comments  路  Source: encode/django-rest-framework

I am trying to test a custom permissions class using APIRequestFactory to fabricate a request. The custom permissions object checks the request body for an OTP using request.data, a convenience property added by DRF Request objects. However this fails because APIRequestFactory directly returns the WSGIRequest object returned by Django's RequestFactory.

Checklist

  • [ ] I have verified that that issue exists against the master branch of Django REST framework.
  • [x] I have searched for similar issues in both open and closed tickets and cannot find a duplicate.
  • [x] This is not a usage question. (Those should be directed to the discussion group instead.)
  • [x] This cannot be dealt with as a third party library. (We prefer new functionality to be in the form of third party libraries where possible.)
  • [x] I have reduced the issue to the simplest possible case.
  • [ ] I have included a failing test as a pull request. (If you are unable to do so we can still accept the issue.)

    Steps to reproduce

    api_rf = APIRequestFactory()
    request = api_rf.post('/some/url', {})
    request.data.get('foo')

Expected behavior

None

Actual behavior

AttributeError: 'WSGIRequest' object has no attribute 'data'

Most helpful comment

Aside: I have warmed to the idea of ensuring that this returns a fully fledged Request instance, and having views be able to handle either, so this might come up in the future.

All 5 comments

This is a duplicate of #3608 (closed).

You can probably achieve what you want by following https://github.com/tomchristie/django-rest-framework/issues/3608#issuecomment-154427523.

So it is. Thanks for the heads-up 馃憤 .

Aside: I have warmed to the idea of ensuring that this returns a fully fledged Request instance, and having views be able to handle either, so this might come up in the future.

try
request.DATA
(caps)

Was this page helpful?
0 / 5 - 0 ratings