diff options
| author | Tom Christie | 2012-10-22 15:24:09 +0100 |
|---|---|---|
| committer | Tom Christie | 2012-10-22 15:24:09 +0100 |
| commit | 95a670de41a246777bc1e448dca8cc576b7b86ea (patch) | |
| tree | 8293dcd0cb012ac54d331b4704bd8a52b42385c5 /rest_framework/renderers.py | |
| parent | bf06f0346ae2459121aaaa693a52bd2e7f4b3c56 (diff) | |
| parent | 93f1aa4f69df85add114c9730a01b50d013a844a (diff) | |
| download | django-rest-framework-95a670de41a246777bc1e448dca8cc576b7b86ea.tar.bz2 | |
Merge field changes: .default and .widget
Diffstat (limited to 'rest_framework/renderers.py')
| -rw-r--r-- | rest_framework/renderers.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 23fd961b..b2dbffd2 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -6,6 +6,7 @@ on the response, such as JSON encoded data or HTML output. REST framework also provides an HTML renderer the renders the browseable API. """ +import copy import string from django import forms from django.http.multipartparser import parse_header @@ -279,13 +280,32 @@ class BrowsableAPIRenderer(BaseRenderer): continue kwargs = {} + kwargs['required'] = v.required + if getattr(v, 'queryset', None): - kwargs['queryset'] = getattr(v, 'queryset', None) + kwargs['queryset'] = v.queryset + + if getattr(v, 'widget', None): + widget = copy.deepcopy(v.widget) + # If choices have friendly readable names, + # then add in the identities too + if getattr(widget, 'choices', None): + choices = widget.choices + if any([ident != desc for (ident, desc) in choices]): + choices = [(ident, "%s (%s)" % (desc, ident)) + for (ident, desc) in choices] + widget.choices = choices + kwargs['widget'] = widget + + if getattr(v, 'default', None) is not None: + kwargs['initial'] = v.default + + kwargs['label'] = k try: fields[k] = field_mapping[v.__class__](**kwargs) except KeyError: - fields[k] = forms.CharField() + fields[k] = forms.CharField(**kwargs) OnTheFlyForm = type("OnTheFlyForm", (forms.Form,), fields) if obj and not view.request.method == 'DELETE': # Don't fill in the form when the object is deleted |
