aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/fields.py
diff options
context:
space:
mode:
authorTom Christie2012-10-30 03:32:55 -0700
committerTom Christie2012-10-30 03:32:55 -0700
commit51a53b497ba794fb77a6dfed072db67087756fe3 (patch)
tree1ee5e2346f469bc868276aadc1a5b3a4ed6a732a /rest_framework/fields.py
parent5f0d4ef2fcbb0206ae456dd6553551cd0039c92d (diff)
parentf4edd9256667af205f4edf9ada642ef9a62802e4 (diff)
downloaddjango-rest-framework-51a53b497ba794fb77a6dfed072db67087756fe3.tar.bz2
Merge pull request #335 from tomchristie/related-field-as-instance
Writable related fields should return a model instance from .from_native...
Diffstat (limited to 'rest_framework/fields.py')
-rw-r--r--rest_framework/fields.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index 067b1087..bb7d0918 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -244,7 +244,7 @@ class RelatedField(WritableField):
return
value = data.get(field_name)
- into[(self.source or field_name) + '_id'] = self.from_native(value)
+ into[(self.source or field_name)] = self.from_native(value)
class ManyRelatedMixin(object):
@@ -288,6 +288,12 @@ class PrimaryKeyRelatedField(RelatedField):
def to_native(self, pk):
return pk
+ def from_native(self, data):
+ try:
+ return self.queryset.get(pk=data)
+ except ObjectDoesNotExist:
+ raise ValidationError('Invalid hyperlink - object does not exist.')
+
def field_to_native(self, obj, field_name):
try:
# Prefer obj.serializable_value for performance reasons
@@ -379,7 +385,7 @@ class HyperlinkedRelatedField(RelatedField):
# Try explicit primary key.
if pk is not None:
- return pk
+ queryset = self.queryset.filter(pk=pk)
# Next, try looking up by slug.
elif slug is not None:
slug_field = self.get_slug_field()
@@ -392,7 +398,7 @@ class HyperlinkedRelatedField(RelatedField):
obj = queryset.get()
except ObjectDoesNotExist:
raise ValidationError('Invalid hyperlink - object does not exist.')
- return obj.pk
+ return obj
class ManyHyperlinkedRelatedField(ManyRelatedMixin, HyperlinkedRelatedField):