aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/serializers.py
diff options
context:
space:
mode:
authorTom Christie2012-10-04 14:14:56 -0700
committerTom Christie2012-10-04 14:14:56 -0700
commitad5e6eb16f4db928e1fc8d0a6af4f9f4584f7b08 (patch)
treeae049236abc6868c0b48803a04e8dc7cd4d5040c /rest_framework/serializers.py
parent42b3fdbdc26927e55713db31548a410870d82949 (diff)
parent693892ed0104b8ce8cd801e7bec6107feeb88782 (diff)
downloaddjango-rest-framework-ad5e6eb16f4db928e1fc8d0a6af4f9f4584f7b08.tar.bz2
Merge pull request #280 from tomchristie/hyperlinked-relationships
Hyperlinked relationships
Diffstat (limited to 'rest_framework/serializers.py')
-rw-r--r--rest_framework/serializers.py26
1 files changed, 22 insertions, 4 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py
index ae0b3cdf..ba8bf8ad 100644
--- a/rest_framework/serializers.py
+++ b/rest_framework/serializers.py
@@ -353,7 +353,9 @@ class ModelSerializer(Serializer):
"""
Creates a default instance of a flat relational field.
"""
- queryset = model_field.rel.to._default_manager # .using(db).complex_filter(self.rel.limit_choices_to)
+ # TODO: filter queryset using:
+ # .using(db).complex_filter(self.rel.limit_choices_to)
+ queryset = model_field.rel.to._default_manager
if isinstance(model_field, models.fields.related.ManyToManyField):
return ManyPrimaryKeyRelatedField(queryset=queryset)
return PrimaryKeyRelatedField(queryset=queryset)
@@ -420,13 +422,13 @@ class HyperlinkedModelSerializer(ModelSerializer):
def __init__(self, *args, **kwargs):
super(HyperlinkedModelSerializer, self).__init__(*args, **kwargs)
if self.opts.view_name is None:
- self.opts.view_name = self._get_default_view_name()
+ self.opts.view_name = self._get_default_view_name(self.opts.model)
- def _get_default_view_name(self):
+ def _get_default_view_name(self, model):
"""
Return the view name to use if 'view_name' is not specified in 'Meta'
"""
- model_meta = self.opts.model._meta
+ model_meta = model._meta
format_kwargs = {
'app_label': model_meta.app_label,
'model_name': model_meta.object_name.lower()
@@ -435,3 +437,19 @@ class HyperlinkedModelSerializer(ModelSerializer):
def get_pk_field(self, model_field):
return None
+
+ def get_related_field(self, model_field):
+ """
+ Creates a default instance of a flat relational field.
+ """
+ # TODO: filter queryset using:
+ # .using(db).complex_filter(self.rel.limit_choices_to)
+ rel = model_field.rel.to
+ queryset = rel._default_manager
+ kwargs = {
+ 'queryset': queryset,
+ 'view_name': self._get_default_view_name(rel)
+ }
+ if isinstance(model_field, models.fields.related.ManyToManyField):
+ return ManyHyperlinkedRelatedField(**kwargs)
+ return HyperlinkedRelatedField(**kwargs)