Code

Ticket #1012: coremeta2.diff

File coremeta2.diff, 1.4 KB (added by Gustavo Picon <gpicon@…>, 9 years ago)

re-submitting without the debugging stuff

Line 
1Index: django/trunk/django/core/meta/__init__.py
2===================================================================
3--- django/trunk/django/core/meta/__init__.py   (revision 1557)
4+++ django/trunk/django/core/meta/__init__.py   (working copy)
5@@ -1784,13 +1784,24 @@
6                 self.fields_changed.append(f.verbose_name)
7 
8     # Save many-to-many objects. Example: Poll.set_sites()
9+    import types
10     for f in opts.many_to_many:
11         if self.follow.get(f.name, None):
12             if not f.rel.edit_inline:
13-                if f.rel.raw_id_admin:
14-                    new_vals = new_data.get(f.name, ())
15-                else:
16-                    new_vals = new_data.getlist(f.name)
17+                new_vals = []
18+                try:
19+                    data = dict.__getitem__(new_data, f.name)
20+                except:
21+                    data = []
22+                if type(data) == types.ListType and len(data) == 1 and \
23+                  type(data[0]) == types.ListType:
24+                    data = data[0]
25+                for foo in data:
26+                    if type(foo) == types.ListType:
27+                        new_vals.append(foo[0])
28+
29+                    else:
30+                        new_vals.append(foo)
31                 was_changed = getattr(new_object, 'set_%s' % f.name)(new_vals)
32                 if change and was_changed:
33                     self.fields_changed.append(f.verbose_name)