From bbc73e6a12227f5ed52fd38bc37f56f434a0a72c Mon Sep 17 00:00:00 2001
From: Roger Hu <rhu@hearsaycorp.com>
Date: Fri, 6 Dec 2013 01:14:57 +0000
Subject: [PATCH] Fixed #21566 -- Fixed AttributeError when using bulk_create
 with ForeignObject.

---
 django/db/models/query.py     | 2 +-
 tests/foreign_object/tests.py | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/django/db/models/query.py b/django/db/models/query.py
index 58180e1cf9..3226f38753 100644
--- 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.local_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 66f57b6f3c..f361c5c8d5 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,12 @@ class MultiColumnFKTests(TestCase):
                     'active_translation')[0].active_translation.title,
                 "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):
     # ForeignObjects should not have any form fields, currently the user needs