Code

Ticket #8669: create-always-inserts.diff

File create-always-inserts.diff, 1.9 KB (added by Richard Davies <richard.davies@…>, 6 years ago)

Fixes for 3 different create() methods

Line 
1Index: db/models/fields/related.py
2===================================================================
3--- db/models/fields/related.py (revision 8696)
4+++ db/models/fields/related.py (working copy)
5@@ -294,15 +294,15 @@
6             def get_query_set(self):
7                 return superclass.get_query_set(self).filter(**(self.core_filters))
8 
9-            def add(self, *objs):
10+            def add(self, *objs, force_insert=False, force_update=False):
11                 for obj in objs:
12                     setattr(obj, rel_field.name, instance)
13-                    obj.save()
14+                    obj.save(force_insert=force_insert, force_update=force_update)
15             add.alters_data = True
16 
17             def create(self, **kwargs):
18                 new_obj = self.model(**kwargs)
19-                self.add(new_obj)
20+                self.add(new_obj, force_insert=True)
21                 return new_obj
22             create.alters_data = True
23 
24@@ -406,7 +406,7 @@
25             if through is not None:
26                 raise AttributeError, "Cannot use create() on a ManyToManyField which specifies an intermediary model. Use %s's Manager instead." % through
27             new_obj = self.model(**kwargs)
28-            new_obj.save()
29+            new_obj.save(force_insert=True)
30             self.add(new_obj)
31             return new_obj
32         create.alters_data = True
33Index: contrib/contenttypes/generic.py
34===================================================================
35--- contrib/contenttypes/generic.py     (revision 8696)
36+++ contrib/contenttypes/generic.py     (working copy)
37@@ -273,7 +273,7 @@
38             kwargs[self.content_type_field_name] = self.content_type
39             kwargs[self.object_id_field_name] = self.pk_val
40             obj = self.model(**kwargs)
41-            obj.save()
42+            obj.save(force_insert=True)
43             return obj
44         create.alters_data = True
45