#21566 closed Bug (fixed)
Creation of models with ForeignObject fails with bulk_create() function
Reported by: | rogerhu | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.6 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
The bulk_create() function uses local_fields instead of concrete_fields.
Change History (8)
comment:3 by , 11 years ago
Component: | Uncategorized → Database layer (models, ORM) |
---|---|
Patch needs improvement: | set |
Triage Stage: | Unreviewed → Accepted |
Type: | Uncategorized → Bug |
Hi,
I can reproduce the issue being reported and the provided patch does seem to fix the problem.
I left a few comments on the pull request. Once those are fixed I think this should be good to go.
Thanks.
comment:4 by , 11 years ago
Thanks. I fixed against your comments. Also, since bulk creation is disabled for inherited models, local_concrete_fields vs. concrete_fields may not matter too much, but I've changed. Thanks again for the fast review!
comment:5 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
`
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -389,7 +389,7 @@ class QuerySet(object):
+ fields = self.model._meta.concrete_fields
diff --git a/tests/foreign_object/tests.py b/tests/foreign_object/tests.py
index 66f57b6..b1502c3 100644
--- a/tests/foreign_object/tests.py
+++ b/tests/foreign_object/tests.py
@@ -4,7 +4,7 @@ from operator import attrgetter
-from django.test import TestCase
+from django.test import TestCase, skipUnlessDBFeature
@@ -380,6 +380,13 @@ class MultiColumnFKTests(TestCase):
+ @skipUnlessDBFeature('has_bulk_insert')
+ def test_batch_create_foreign_object(self):
+ self.bob.person_country = self.usa
+
+ objs = [Person(name=i, person_country=self.usa) for i in range(0, 5)]
+ Person.objects.bulk_create(objs, 10)
+
`