diff options
| author | Tom Christie | 2013-06-04 14:05:35 +0100 | 
|---|---|---|
| committer | Tom Christie | 2013-06-04 14:05:35 +0100 | 
| commit | c160e49321d77c6b1b99fc898e2624760edc137b (patch) | |
| tree | cdb7b7e2680ef18f800d8cc251dd17456d60c0b8 /rest_framework/relations.py | |
| parent | 478f6ff94a6f4ce68bae5133def0e7a042f3c85a (diff) | |
| download | django-rest-framework-c160e49321d77c6b1b99fc898e2624760edc137b.tar.bz2 | |
Test cases and fix for plain-list relationships (ie not queryset) Closes #878.
Diffstat (limited to 'rest_framework/relations.py')
| -rw-r--r-- | rest_framework/relations.py | 16 | 
1 files changed, 13 insertions, 3 deletions
| diff --git a/rest_framework/relations.py b/rest_framework/relations.py index e3675b51..edaf76d6 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -12,7 +12,7 @@ from django.db.models.fields import BLANK_CHOICE_DASH  from django.forms import widgets  from django.forms.models import ModelChoiceIterator  from django.utils.translation import ugettext_lazy as _ -from rest_framework.fields import Field, WritableField, get_component +from rest_framework.fields import Field, WritableField, get_component, is_simple_callable  from rest_framework.reverse import reverse  from rest_framework.compat import urlparse  from rest_framework.compat import smart_text @@ -144,7 +144,12 @@ class RelatedField(WritableField):              return None          if self.many: -            return [self.to_native(item) for item in value.all()] +            if is_simple_callable(getattr(value, 'all', None)): +                return [self.to_native(item) for item in value.all()] +            else: +                # Also support non-queryset iterables. +                # This allows us to also support plain lists of related items. +                return [self.to_native(item) for item in value]          return self.to_native(value)      def field_from_native(self, data, files, field_name, into): @@ -242,7 +247,12 @@ class PrimaryKeyRelatedField(RelatedField):                      queryset = get_component(queryset, component)              # Forward relationship -            return [self.to_native(item.pk) for item in queryset.all()] +            if is_simple_callable(getattr(queryset, 'all', None)): +                return [self.to_native(item.pk) for item in queryset.all()] +            else: +                # Also support non-queryset iterables. +                # This allows us to also support plain lists of related items. +                return [self.to_native(item.pk) for item in queryset]          # To-one relationship          try: | 
