diff options
| author | Ryan Kaskel | 2013-05-18 13:11:40 +0100 | 
|---|---|---|
| committer | Ryan Kaskel | 2013-05-18 13:11:40 +0100 | 
| commit | 770ed3de2ef8339ec0b74f7eb522283718e01a3b (patch) | |
| tree | 563b57c1af80d04ac7564c2e040781ce57bff4f7 /rest_framework/serializers.py | |
| parent | 34776da9249a5d73f822b3562bc56a5674b10ac7 (diff) | |
| download | django-rest-framework-770ed3de2ef8339ec0b74f7eb522283718e01a3b.tar.bz2 | |
ToMany fields default to read-only if targeting ManyToManyField.
Diffstat (limited to 'rest_framework/serializers.py')
| -rw-r--r-- | rest_framework/serializers.py | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 7707de7a..75f1e1d0 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -587,11 +587,16 @@ class ModelSerializer(Serializer):          forward_rels += [field for field in opts.many_to_many if field.serialize]          for model_field in forward_rels: +            has_user_through_model = False +              if model_field.rel:                  to_many = isinstance(model_field,                                       models.fields.related.ManyToManyField)                  related_model = model_field.rel.to +                if to_many and not model_field.rel.through._meta.auto_created: +                    has_user_through_model = True +              if model_field.rel and nested:                  if len(inspect.getargspec(self.get_nested_field).args) == 2:                      warnings.warn( @@ -620,6 +625,9 @@ class ModelSerializer(Serializer):                  field = self.get_field(model_field)              if field: +                if has_user_through_model: +                    field.read_only = True +                  ret[model_field.name] = field          # Deal with reverse relationships @@ -637,6 +645,12 @@ class ModelSerializer(Serializer):                  continue              related_model = relation.model              to_many = relation.field.rel.multiple +            has_user_through_model = False +            is_m2m = isinstance(relation.field, +                                models.fields.related.ManyToManyField) + +            if is_m2m and not relation.field.rel.through._meta.auto_created: +                has_user_through_model = True              if nested:                  field = self.get_nested_field(None, related_model, to_many) @@ -644,6 +658,9 @@ class ModelSerializer(Serializer):                  field = self.get_related_field(None, related_model, to_many)              if field: +                if has_user_through_model: +                    field.read_only = True +                  ret[accessor_name] = field          # Add the `read_only` flag to any fields that have bee specified | 
