[1.6.x] Fixed #21566 -- Fixed AttributeError when using bulk_create with ForeignObject.

Backport of bbc73e6a12 from master.
This commit is contained in:
Roger Hu 2013-12-06 01:14:57 +00:00 committed by Tim Graham
parent 32a880ae95
commit 9a446211bd
2 changed files with 9 additions and 2 deletions

View File

@ -342,7 +342,7 @@ class QuerySet(object):
return objs return objs
self._for_write = True self._for_write = True
connection = connections[self.db] connection = connections[self.db]
fields = self.model._meta.local_fields fields = self.model._meta.local_concrete_fields
with transaction.commit_on_success_unless_managed(using=self.db): with transaction.commit_on_success_unless_managed(using=self.db):
if (connection.features.can_combine_inserts_with_and_without_auto_increment_pk if (connection.features.can_combine_inserts_with_and_without_auto_increment_pk
and self.model._meta.has_auto_field): and self.model._meta.has_auto_field):

View File

@ -4,7 +4,7 @@ from operator import attrgetter
from .models import ( from .models import (
Country, Person, Group, Membership, Friendship, Article, Country, Person, Group, Membership, Friendship, Article,
ArticleTranslation, ArticleTag, ArticleIdea, NewsArticle) ArticleTranslation, ArticleTag, ArticleIdea, NewsArticle)
from django.test import TestCase from django.test import TestCase, skipUnlessDBFeature
from django.utils.translation import activate from django.utils.translation import activate
from django.core.exceptions import FieldError from django.core.exceptions import FieldError
from django import forms from django import forms
@ -362,6 +362,13 @@ class MultiColumnFKTests(TestCase):
'active_translation')[0].active_translation.title, 'active_translation')[0].active_translation.title,
"foo") "foo")
@skipUnlessDBFeature('has_bulk_insert')
def test_batch_create_foreign_object(self):
""" See: https://code.djangoproject.com/ticket/21566 """
objs = [Person(name="abcd_%s" % i, person_country=self.usa) for i in range(0, 5)]
Person.objects.bulk_create(objs, 10)
class FormsTests(TestCase): class FormsTests(TestCase):
# ForeignObjects should not have any form fields, currently the user needs # ForeignObjects should not have any form fields, currently the user needs
# to manually deal with the foreignobject relation. # to manually deal with the foreignobject relation.