@@ -421,6 +421,14 @@ def show_form_for_method(self, view, method, request, obj):
421
421
return False # Doesn't have permissions
422
422
return True
423
423
424
+ def _get_serializer (self , serializer_class , view_instance , request , * args , ** kwargs ):
425
+ kwargs ['context' ] = {
426
+ 'request' : request ,
427
+ 'format' : self .format ,
428
+ 'view' : view_instance
429
+ }
430
+ return serializer_class (* args , ** kwargs )
431
+
424
432
def get_rendered_html_form (self , data , view , method , request ):
425
433
"""
426
434
Return a string representing a rendered HTML form, possibly bound to
@@ -457,19 +465,31 @@ def get_rendered_html_form(self, data, view, method, request):
457
465
if method in ('DELETE' , 'OPTIONS' ):
458
466
return True # Don't actually need to return a form
459
467
468
+ has_serializer = getattr (view , 'get_serializer' , None )
469
+ has_serializer_class = getattr (view , 'serializer_class' , None )
470
+
460
471
if (
461
- not getattr ( view , 'get_serializer' , None ) or
472
+ ( not has_serializer and not has_serializer_class ) or
462
473
not any (is_form_media_type (parser .media_type ) for parser in view .parser_classes )
463
474
):
464
475
return
465
476
466
477
if existing_serializer is not None :
467
478
serializer = existing_serializer
468
479
else :
469
- if method in ('PUT' , 'PATCH' ):
470
- serializer = view .get_serializer (instance = instance , ** kwargs )
480
+ if has_serializer :
481
+ if method in ('PUT' , 'PATCH' ):
482
+ serializer = view .get_serializer (instance = instance , ** kwargs )
483
+ else :
484
+ serializer = view .get_serializer (** kwargs )
471
485
else :
472
- serializer = view .get_serializer (** kwargs )
486
+ # at this point we must have a serializer_class
487
+ if method in ('PUT' , 'PATCH' ):
488
+ serializer = self ._get_serializer (view .serializer_class , view ,
489
+ request , instance = instance , ** kwargs )
490
+ else :
491
+ serializer = self ._get_serializer (view .serializer_class , view ,
492
+ request , ** kwargs )
473
493
474
494
if hasattr (serializer , 'initial_data' ):
475
495
serializer .is_valid ()
0 commit comments