aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2012-10-30 02:22:51 -0700
committerTom Christie2012-10-30 02:22:51 -0700
commite5777a61681ea8937b003c5875955b61f6cbe36c (patch)
treecfc6496c88db079e214e73145d6b5148f912e2a4
parent62ec3680dcaff899ee0fefbf6d0be452bddc5979 (diff)
parent206859529780adbe7f49ee1e4d466e3b4fe13099 (diff)
downloaddjango-rest-framework-e5777a61681ea8937b003c5875955b61f6cbe36c.tar.bz2
Merge pull request #336 from markotibold/null_is_true_model_fields
Null is true model fields
-rw-r--r--rest_framework/serializers.py3
-rw-r--r--rest_framework/tests/models.py5
-rw-r--r--rest_framework/tests/serializer.py13
3 files changed, 21 insertions, 0 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index 1cfcf103..16e2c835 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -393,6 +393,9 @@ class ModelSerializer(Serializer):
Creates a default instance of a basic non-relational field.
"""
kwargs = {}
+ if model_field.null:
+ kwargs['required'] = False
+
if model_field.has_default():
kwargs['required'] = False
kwargs['default'] = model_field.get_default()
diff --git a/rest_framework/tests/models.py b/rest_framework/tests/models.py
index ac73a4bb..fb23e359 100644
--- a/rest_framework/tests/models.py
+++ b/rest_framework/tests/models.py
@@ -116,3 +116,8 @@ class BlogPost(RESTFrameworkModel):
class BlogPostComment(RESTFrameworkModel):
text = models.TextField()
blog_post = models.ForeignKey(BlogPost)
+
+
+class Person(RESTFrameworkModel):
+ name = models.CharField(max_length=10)
+ age = models.IntegerField(null=True, blank=True)
diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py
index 5df3bd7e..eb21dc46 100644
--- a/rest_framework/tests/serializer.py
+++ b/rest_framework/tests/serializer.py
@@ -43,6 +43,11 @@ class ActionItemSerializer(serializers.ModelSerializer):
model = ActionItem
+class PersonSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = Person
+
+
class BasicTests(TestCase):
def setUp(self):
self.comment = Comment(
@@ -188,6 +193,14 @@ class ValidationTests(TestCase):
self.assertFalse(serializer.is_valid())
self.assertEquals(serializer.errors, {'non_field_errors': [u'Email address not in content']})
+ def test_null_is_true_fields(self):
+ """
+ Omitting a value for null-field should validate.
+ """
+ serializer = PersonSerializer({'name': 'marko'})
+ self.assertEquals(serializer.is_valid(), True)
+ self.assertEquals(serializer.errors, {})
+
class MetadataTests(TestCase):
def test_empty(self):