@@ -336,7 +336,7 @@ def show_form_for_method(self, view, method, request, obj):
336
336
return # Cannot use form overloading
337
337
338
338
try :
339
- view .check_permissions (clone_request ( request , method ) )
339
+ view .check_permissions (request )
340
340
except exceptions .APIException :
341
341
return False # Doesn't have permissions
342
342
return True
@@ -372,6 +372,30 @@ def serializer_to_form_fields(self, serializer):
372
372
373
373
return fields
374
374
375
+ def _get_form (self , view , method , request ):
376
+ # We need to impersonate a request with the correct method,
377
+ # so that eg. any dynamic get_serializer_class methods return the
378
+ # correct form for each method.
379
+ restore = view .request
380
+ request = clone_request (request , method )
381
+ view .request = request
382
+ try :
383
+ return self .get_form (view , method , request )
384
+ finally :
385
+ view .request = restore
386
+
387
+ def _get_raw_data_form (self , view , method , request , media_types ):
388
+ # We need to impersonate a request with the correct method,
389
+ # so that eg. any dynamic get_serializer_class methods return the
390
+ # correct form for each method.
391
+ restore = view .request
392
+ request = clone_request (request , method )
393
+ view .request = request
394
+ try :
395
+ return self .get_raw_data_form (view , method , request , media_types )
396
+ finally :
397
+ view .request = restore
398
+
375
399
def get_form (self , view , method , request ):
376
400
"""
377
401
Get a form, possibly bound to either the input or output data.
@@ -465,15 +489,15 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
465
489
renderer = self .get_default_renderer (view )
466
490
content = self .get_content (renderer , data , accepted_media_type , renderer_context )
467
491
468
- put_form = self .get_form (view , 'PUT' , request )
469
- post_form = self .get_form (view , 'POST' , request )
470
- patch_form = self .get_form (view , 'PATCH' , request )
471
- delete_form = self .get_form (view , 'DELETE' , request )
472
- options_form = self .get_form (view , 'OPTIONS' , request )
492
+ put_form = self ._get_form (view , 'PUT' , request )
493
+ post_form = self ._get_form (view , 'POST' , request )
494
+ patch_form = self ._get_form (view , 'PATCH' , request )
495
+ delete_form = self ._get_form (view , 'DELETE' , request )
496
+ options_form = self ._get_form (view , 'OPTIONS' , request )
473
497
474
- raw_data_put_form = self .get_raw_data_form (view , 'PUT' , request , media_types )
475
- raw_data_post_form = self .get_raw_data_form (view , 'POST' , request , media_types )
476
- raw_data_patch_form = self .get_raw_data_form (view , 'PATCH' , request , media_types )
498
+ raw_data_put_form = self ._get_raw_data_form (view , 'PUT' , request , media_types )
499
+ raw_data_post_form = self ._get_raw_data_form (view , 'POST' , request , media_types )
500
+ raw_data_patch_form = self ._get_raw_data_form (view , 'PATCH' , request , media_types )
477
501
raw_data_put_or_patch_form = raw_data_put_form or raw_data_patch_form
478
502
479
503
name = self .get_name (view )
0 commit comments