Added model form field -> serializer form field mapping

This commit is contained in:
Tom Christie 2012-10-02 16:16:49 +01:00
parent f010a9553e
commit d1b99f350a
3 changed files with 27 additions and 23 deletions

View File

@ -439,19 +439,3 @@ class FloatField(Field):
except (TypeError, ValueError): except (TypeError, ValueError):
msg = self.error_messages['invalid'] % value msg = self.error_messages['invalid'] % value
raise ValidationError(msg) raise ValidationError(msg)
# field_mapping = {
# models.AutoField: IntegerField,
# models.BooleanField: BooleanField,
# models.CharField: CharField,
# models.DateTimeField: DateTimeField,
# models.DateField: DateField,
# models.BigIntegerField: IntegerField,
# models.IntegerField: IntegerField,
# models.PositiveIntegerField: IntegerField,
# models.FloatField: FloatField
# }
# def modelfield_to_serializerfield(field):
# return field_mapping.get(type(field), Field)

View File

@ -3,6 +3,7 @@ import datetime
import types import types
from decimal import Decimal from decimal import Decimal
from django.core.serializers.base import DeserializedObject from django.core.serializers.base import DeserializedObject
from django.db import models
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict
from rest_framework.compat import get_concrete_model from rest_framework.compat import get_concrete_model
from rest_framework.fields import * from rest_framework.fields import *
@ -349,7 +350,20 @@ class ModelSerializer(RelatedField, Serializer):
""" """
Creates a default instance of a basic non-relational field. Creates a default instance of a basic non-relational field.
""" """
return 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]
])
try:
return field_mapping[model_field.__class__]()
except KeyError:
return Field()
def restore_object(self, attrs, instance=None): def restore_object(self, attrs, instance=None):
""" """

View File

@ -52,7 +52,8 @@ class TestRootView(TestCase):
POST requests to RootAPIView should create a new object. POST requests to RootAPIView should create a new object.
""" """
content = {'text': 'foobar'} content = {'text': 'foobar'}
request = factory.post('/', json.dumps(content), content_type='application/json') request = factory.post('/', json.dumps(content),
content_type='application/json')
response = self.view(request).render() response = self.view(request).render()
self.assertEquals(response.status_code, status.HTTP_201_CREATED) self.assertEquals(response.status_code, status.HTTP_201_CREATED)
self.assertEquals(response.data, {'id': 4, 'text': u'foobar'}) self.assertEquals(response.data, {'id': 4, 'text': u'foobar'})
@ -64,7 +65,8 @@ class TestRootView(TestCase):
PUT requests to RootAPIView should not be allowed PUT requests to RootAPIView should not be allowed
""" """
content = {'text': 'foobar'} content = {'text': 'foobar'}
request = factory.put('/', json.dumps(content), content_type='application/json') request = factory.put('/', json.dumps(content),
content_type='application/json')
response = self.view(request).render() response = self.view(request).render()
self.assertEquals(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED) self.assertEquals(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
self.assertEquals(response.data, {"detail": "Method 'PUT' not allowed."}) self.assertEquals(response.data, {"detail": "Method 'PUT' not allowed."})
@ -105,7 +107,8 @@ class TestRootView(TestCase):
POST requests to create a new object should not be able to set the id. POST requests to create a new object should not be able to set the id.
""" """
content = {'id': 999, 'text': 'foobar'} content = {'id': 999, 'text': 'foobar'}
request = factory.post('/', json.dumps(content), content_type='application/json') request = factory.post('/', json.dumps(content),
content_type='application/json')
response = self.view(request).render() response = self.view(request).render()
self.assertEquals(response.status_code, status.HTTP_201_CREATED) self.assertEquals(response.status_code, status.HTTP_201_CREATED)
self.assertEquals(response.data, {'id': 4, 'text': u'foobar'}) self.assertEquals(response.data, {'id': 4, 'text': u'foobar'})
@ -142,7 +145,8 @@ class TestInstanceView(TestCase):
POST requests to InstanceAPIView should not be allowed POST requests to InstanceAPIView should not be allowed
""" """
content = {'text': 'foobar'} content = {'text': 'foobar'}
request = factory.post('/', json.dumps(content), content_type='application/json') request = factory.post('/', json.dumps(content),
content_type='application/json')
response = self.view(request).render() response = self.view(request).render()
self.assertEquals(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED) self.assertEquals(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
self.assertEquals(response.data, {"detail": "Method 'POST' not allowed."}) self.assertEquals(response.data, {"detail": "Method 'POST' not allowed."})
@ -152,7 +156,8 @@ class TestInstanceView(TestCase):
PUT requests to InstanceAPIView should update an object. PUT requests to InstanceAPIView should update an object.
""" """
content = {'text': 'foobar'} content = {'text': 'foobar'}
request = factory.put('/1', json.dumps(content), content_type='application/json') request = factory.put('/1', json.dumps(content),
content_type='application/json')
response = self.view(request, pk=1).render() response = self.view(request, pk=1).render()
self.assertEquals(response.status_code, status.HTTP_200_OK) self.assertEquals(response.status_code, status.HTTP_200_OK)
self.assertEquals(response.data, {'id': 1, 'text': 'foobar'}) self.assertEquals(response.data, {'id': 1, 'text': 'foobar'})
@ -197,7 +202,8 @@ class TestInstanceView(TestCase):
POST requests to create a new object should not be able to set the id. POST requests to create a new object should not be able to set the id.
""" """
content = {'id': 999, 'text': 'foobar'} content = {'id': 999, 'text': 'foobar'}
request = factory.put('/1', json.dumps(content), content_type='application/json') request = factory.put('/1', json.dumps(content),
content_type='application/json')
response = self.view(request, pk=1).render() response = self.view(request, pk=1).render()
self.assertEquals(response.status_code, status.HTTP_200_OK) self.assertEquals(response.status_code, status.HTTP_200_OK)
self.assertEquals(response.data, {'id': 1, 'text': 'foobar'}) self.assertEquals(response.data, {'id': 1, 'text': 'foobar'})