diff options
| author | Tom Christie | 2012-10-04 14:14:56 -0700 |
|---|---|---|
| committer | Tom Christie | 2012-10-04 14:14:56 -0700 |
| commit | ad5e6eb16f4db928e1fc8d0a6af4f9f4584f7b08 (patch) | |
| tree | ae049236abc6868c0b48803a04e8dc7cd4d5040c /rest_framework/serializers.py | |
| parent | 42b3fdbdc26927e55713db31548a410870d82949 (diff) | |
| parent | 693892ed0104b8ce8cd801e7bec6107feeb88782 (diff) | |
| download | django-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.py | 26 |
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) |
