aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rest_framework/fields.py2
-rw-r--r--rest_framework/utils/field_mapping.py3
-rw-r--r--tests/test_model_serializer.py4
3 files changed, 7 insertions, 2 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index 0963d4bf..9d577c53 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -224,6 +224,8 @@ class Field(object):
"""
if self.default is empty:
raise SkipField()
+ if is_simple_callable(self.default):
+ return self.default()
return self.default
def run_validation(self, data=empty):
diff --git a/rest_framework/utils/field_mapping.py b/rest_framework/utils/field_mapping.py
index 30fae370..fd6da699 100644
--- a/rest_framework/utils/field_mapping.py
+++ b/rest_framework/utils/field_mapping.py
@@ -219,6 +219,9 @@ def get_relation_kwargs(field_name, relation_info):
kwargs['required'] = False
if model_field.null:
kwargs['allow_null'] = True
+ if getattr(model_field, 'unique', False):
+ validator = UniqueValidator(queryset=model_field.model._default_manager)
+ kwargs['validators'] = [validator]
return kwargs
diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py
index bb74cd2e..18170bc0 100644
--- a/tests/test_model_serializer.py
+++ b/tests/test_model_serializer.py
@@ -248,7 +248,7 @@ class TestRelationalFieldMappings(TestCase):
TestSerializer():
id = IntegerField(label='ID', read_only=True)
foreign_key = PrimaryKeyRelatedField(queryset=ForeignKeyTargetModel.objects.all())
- one_to_one = PrimaryKeyRelatedField(queryset=OneToOneTargetModel.objects.all())
+ one_to_one = PrimaryKeyRelatedField(queryset=OneToOneTargetModel.objects.all(), validators=[<UniqueValidator(queryset=RelationalModel.objects.all())>])
many_to_many = PrimaryKeyRelatedField(many=True, queryset=ManyToManyTargetModel.objects.all())
through = PrimaryKeyRelatedField(many=True, read_only=True)
""")
@@ -287,7 +287,7 @@ class TestRelationalFieldMappings(TestCase):
TestSerializer():
url = HyperlinkedIdentityField(view_name='relationalmodel-detail')
foreign_key = HyperlinkedRelatedField(queryset=ForeignKeyTargetModel.objects.all(), view_name='foreignkeytargetmodel-detail')
- one_to_one = HyperlinkedRelatedField(queryset=OneToOneTargetModel.objects.all(), view_name='onetoonetargetmodel-detail')
+ one_to_one = HyperlinkedRelatedField(queryset=OneToOneTargetModel.objects.all(), validators=[<UniqueValidator(queryset=RelationalModel.objects.all())>], view_name='onetoonetargetmodel-detail')
many_to_many = HyperlinkedRelatedField(many=True, queryset=ManyToManyTargetModel.objects.all(), view_name='manytomanytargetmodel-detail')
through = HyperlinkedRelatedField(many=True, read_only=True, view_name='throughtargetmodel-detail')
""")