diff options
Diffstat (limited to 'djangorestframework/mixins.py')
| -rw-r--r-- | djangorestframework/mixins.py | 16 | 
1 files changed, 14 insertions, 2 deletions
diff --git a/djangorestframework/mixins.py b/djangorestframework/mixins.py index 4d8b2d35..bb26ad96 100644 --- a/djangorestframework/mixins.py +++ b/djangorestframework/mixins.py @@ -524,7 +524,9 @@ class CreateModelMixin(object):          for field in model._meta.many_to_many:              if content.has_key(field.name): -                m2m_data[field.name] = content[field.name] +                m2m_data[field.name] = ( +                    field.m2m_reverse_field_name(), content[field.name] +                )                  del content[field.name]          all_kw_args = dict(content.items() + kwargs.items()) @@ -536,7 +538,17 @@ class CreateModelMixin(object):          instance.save()          for fieldname in m2m_data: -            getattr(instance, fieldname).add(*m2m_data[fieldname]) +            manager = getattr(instance, fieldname) +             +            if hasattr(manager, 'add'): +                manager.add(*m2m_data[fieldname][1]) +            else: +                data = {} +                data[manager.source_field_name] = instance +                 +                for related_item in m2m_data[fieldname][1]: +                    data[m2m_data[fieldname][0]] = related_item +                    manager.through(**data).save()          headers = {}          if hasattr(instance, 'get_absolute_url'):  | 
