diff options
| author | Tom Christie | 2012-10-03 09:45:27 +0100 | 
|---|---|---|
| committer | Tom Christie | 2012-10-03 09:45:27 +0100 | 
| commit | 1a05942166abfc68f83caea535aa44733b1e37a9 (patch) | |
| tree | 02ce6b0d2dfa4a1bf60368be0a0f236860eceeaa /rest_framework | |
| parent | c30e0795bebd9980a66ae7db1a0d8c43f77d4c11 (diff) | |
| download | django-rest-framework-1a05942166abfc68f83caea535aa44733b1e37a9.tar.bz2 | |
Stopgap fix for model fields rendering in browseable API
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/renderers.py | 26 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 20 | 
2 files changed, 25 insertions, 21 deletions
diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index b3d27630..9484e29b 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -238,15 +238,16 @@ class DocumentingHTMLRenderer(BaseRenderer):              return self.get_generic_content_form(view)          #  We need to map our Fields to Django's Fields. -        field_mapping = dict([ -            [serializers.FloatField.__name__, forms.FloatField], -            [serializers.IntegerField.__name__, forms.IntegerField], -            [serializers.DateTimeField.__name__, forms.DateTimeField], -            [serializers.DateField.__name__, forms.DateField], -            [serializers.EmailField.__name__, forms.EmailField], -            [serializers.CharField.__name__, forms.CharField], -            [serializers.BooleanField.__name__, forms.BooleanField] -        ]) +        # TODO: Remove this and just render serializer fields directly +        field_mapping = { +            serializers.FloatField: forms.FloatField, +            serializers.IntegerField: forms.IntegerField, +            serializers.DateTimeField: forms.DateTimeField, +            serializers.DateField: forms.DateField, +            serializers.EmailField: forms.EmailField, +            serializers.CharField: forms.CharField, +            serializers.BooleanField: forms.BooleanField +        }          # Creating an on the fly form see: http://stackoverflow.com/questions/3915024/dynamically-creating-classes-python          fields = {} @@ -255,10 +256,13 @@ class DocumentingHTMLRenderer(BaseRenderer):              obj = view.object          serializer = view.get_serializer(instance=obj) -        for k, v in serializer.fields.items(): +        for k, v in serializer.get_fields(True).items():              if v.readonly:                  continue -            fields[k] = field_mapping[v.__class__.__name__]() +            try: +                fields[k] = field_mapping[v.__class__]() +            except KeyError: +                fields[k] = forms.CharField          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 diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 83ec1470..5935bce5 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -350,16 +350,16 @@ class ModelSerializer(RelatedField, Serializer):          """          Creates a default instance of a basic non-relational field.          """ -        field_mapping = dict([ -            [models.FloatField, FloatField], -            [models.IntegerField, IntegerField], -            [models.DateTimeField, DateTimeField], -            [models.DateField, DateField], -            [models.EmailField, EmailField], -            [models.CharField, CharField], -            [models.CommaSeparatedIntegerField, CharField], -            [models.BooleanField, BooleanField] -        ]) +        field_mapping = { +            models.FloatField: FloatField, +            models.IntegerField: IntegerField, +            models.DateTimeField: DateTimeField, +            models.DateField: DateField, +            models.EmailField: EmailField, +            models.CharField: CharField, +            models.CommaSeparatedIntegerField: CharField, +            models.BooleanField: BooleanField +        }          try:              return field_mapping[model_field.__class__]()          except KeyError:  | 
