mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-03 13:14:30 +03:00
Fields are showing up again. Still WIP.
This commit is contained in:
parent
274420c658
commit
024780a974
|
@ -16,6 +16,7 @@ from djangorestframework.utils import encoders
|
||||||
from djangorestframework.utils.breadcrumbs import get_breadcrumbs
|
from djangorestframework.utils.breadcrumbs import get_breadcrumbs
|
||||||
from djangorestframework.utils.mediatypes import get_media_type_params, add_media_type_param, media_type_matches
|
from djangorestframework.utils.mediatypes import get_media_type_params, add_media_type_param, media_type_matches
|
||||||
from djangorestframework import VERSION
|
from djangorestframework import VERSION
|
||||||
|
from djangorestframework.fields import FloatField, IntegerField, DateTimeField, DateField, EmailField, CharField, BooleanField
|
||||||
|
|
||||||
import string
|
import string
|
||||||
|
|
||||||
|
@ -234,32 +235,24 @@ class DocumentingTemplateRenderer(BaseRenderer):
|
||||||
provide a form that can be used to submit arbitrary content.
|
provide a form that can be used to submit arbitrary content.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Get the form instance if we have one bound to the input
|
# We need to map our Fields to Django's Fields.
|
||||||
form_instance = None
|
field_mapping = dict([
|
||||||
if method == getattr(view, 'method', view.request.method).lower():
|
[FloatField.__name__, forms.FloatField],
|
||||||
form_instance = getattr(view, 'bound_form_instance', None)
|
[IntegerField.__name__, forms.IntegerField],
|
||||||
|
[DateTimeField.__name__, forms.DateTimeField],
|
||||||
|
[DateField.__name__, forms.DateField],
|
||||||
|
[EmailField.__name__, forms.EmailField],
|
||||||
|
[CharField.__name__, forms.CharField],
|
||||||
|
[BooleanField.__name__, forms.BooleanField]
|
||||||
|
])
|
||||||
|
|
||||||
if not form_instance and hasattr(view, 'get_bound_form'):
|
# Creating an on the fly form see: http://stackoverflow.com/questions/3915024/dynamically-creating-classes-python
|
||||||
# Otherwise if we have a response that is valid against the form then use that
|
fields = {}
|
||||||
if view.response.has_content_body:
|
for k, v in self.view.get_serializer().fields.items():
|
||||||
try:
|
fields[k] = field_mapping[v.__class__.__name__]()
|
||||||
form_instance = view.get_bound_form(view.response.cleaned_content, method=method)
|
OnTheFlyForm = type("OnTheFlyForm", (forms.Form,), fields)
|
||||||
if form_instance and not form_instance.is_valid():
|
|
||||||
form_instance = None
|
|
||||||
except Exception:
|
|
||||||
form_instance = None
|
|
||||||
|
|
||||||
# If we still don't have a form instance then try to get an unbound form
|
|
||||||
if not form_instance:
|
|
||||||
try:
|
|
||||||
form_instance = view.get_bound_form(method=method)
|
|
||||||
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:
|
|
||||||
form_instance = self._get_generic_content_form(view)
|
|
||||||
|
|
||||||
|
form_instance = OnTheFlyForm(self.view.get_serializer().data)
|
||||||
return form_instance
|
return form_instance
|
||||||
|
|
||||||
def _get_generic_content_form(self, view):
|
def _get_generic_content_form(self, view):
|
||||||
|
|
|
@ -78,8 +78,6 @@
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% comment %}
|
|
||||||
DROP POST/PUT/DELETE until the forms are working with REST framework 2
|
|
||||||
|
|
||||||
{# Only display the POST/PUT/DELETE forms if method tunneling via POST forms is enabled and the user has permissions on this view. #}
|
{# Only display the POST/PUT/DELETE forms if method tunneling via POST forms is enabled and the user has permissions on this view. #}
|
||||||
{% if response.status_code != 403 %}
|
{% if response.status_code != 403 %}
|
||||||
|
@ -90,7 +88,7 @@
|
||||||
<h2>POST {{ name }}</h2>
|
<h2>POST {{ name }}</h2>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ post_form.non_field_errors }}
|
{{ post_form.non_field_errors }}
|
||||||
{% for field in post_form %}
|
{% for field in post_form %}
|
||||||
<div class='form-row'>
|
<div class='form-row'>
|
||||||
{{ field.label_tag }}
|
{{ field.label_tag }}
|
||||||
{{ field }}
|
{{ field }}
|
||||||
|
@ -141,7 +139,6 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endcomment %}
|
|
||||||
</div>
|
</div>
|
||||||
<!-- END content-main -->
|
<!-- END content-main -->
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user