mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-12-01 05:54:01 +03:00
Add GET method form handling
Add handling of forms for the GET method. The code requires the form for the GET method to be explicitly declared (e.g., get_form = AGetForm); the form attribute will only be used for POST and PUT but not GET.
This commit is contained in:
parent
d88ae359b8
commit
580031a914
|
@ -251,8 +251,10 @@ class DocumentingTemplateRenderer(BaseRenderer):
|
|||
except Exception:
|
||||
pass
|
||||
|
||||
# If we still don't have a form instance then try to get an unbound form which can tunnel arbitrary content types
|
||||
if not form_instance:
|
||||
# If we still don't have a form instance then try to get an unbound form
|
||||
# which can tunnel arbitrary content types. Forms for the GET method
|
||||
# must be explicit, so do not create a generic form.
|
||||
if not form_instance and method != 'get':
|
||||
form_instance = self._get_generic_content_form(view)
|
||||
|
||||
return form_instance
|
||||
|
@ -316,6 +318,7 @@ class DocumentingTemplateRenderer(BaseRenderer):
|
|||
|
||||
content = self._get_content(self.view, self.view.request, obj, media_type)
|
||||
|
||||
get_form_instance = self._get_form_instance(self.view, 'get')
|
||||
put_form_instance = self._get_form_instance(self.view, 'put')
|
||||
post_form_instance = self._get_form_instance(self.view, 'post')
|
||||
|
||||
|
@ -342,6 +345,7 @@ class DocumentingTemplateRenderer(BaseRenderer):
|
|||
'version': VERSION,
|
||||
'breadcrumblist': breadcrumb_list,
|
||||
'available_formats': self.view._rendered_formats,
|
||||
'get_form': get_form_instance,
|
||||
'put_form': put_form_instance,
|
||||
'post_form': post_form_instance,
|
||||
'FORMAT_PARAM': self._FORMAT_QUERY_PARAM,
|
||||
|
|
|
@ -182,15 +182,19 @@ class FormResource(Resource):
|
|||
"""
|
||||
Returns the form class used to validate this resource.
|
||||
"""
|
||||
# A form on the view overrides a form on the resource.
|
||||
form = getattr(self.view, 'form', None) or self.form
|
||||
|
||||
# Use the requested method or determine the request method
|
||||
if method is None and hasattr(self.view, 'request') and hasattr(self.view, 'method'):
|
||||
method = self.view.method
|
||||
elif method is None and hasattr(self.view, 'request'):
|
||||
method = self.view.request.method
|
||||
|
||||
# A form on the view overrides a form on the resource. The GET method
|
||||
# must have its form explicity set (e.g., get_form).
|
||||
if not method or method.lower() != 'get':
|
||||
form = getattr(self.view, 'form', None) or self.form
|
||||
else:
|
||||
form = None
|
||||
|
||||
# A method form on the view or resource overrides the general case.
|
||||
# Method forms are attributes like `get_form` `post_form` `put_form`.
|
||||
if method:
|
||||
|
|
Loading…
Reference in New Issue
Block a user