#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 , 12 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 , 12 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 , 12 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): return objs self._for_write = True connection = connections[self.db] - fields = self.model._meta.local_fields + fields = self.model._meta.concrete_fields with transaction.commit_on_success_unless_managed(using=self.db): if (connection.features.can_combine_inserts_with_and_without_auto_increment_pk and self.model._meta.has_auto_field): 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 .models import ( Country, Person, Group, Membership, Friendship, Article, ArticleTranslation, ArticleTag, ArticleIdea, NewsArticle) -from django.test import TestCase +from django.test import TestCase, skipUnlessDBFeature from django.utils.translation import activate from django.core.exceptions import FieldError from django import forms @@ -380,6 +380,13 @@ class MultiColumnFKTests(TestCase): 'active_translation')[0].active_translation.title, "foo") + @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) +