summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTom Carrick <knyght@knyg.ht>2017-03-28 16:57:23 +0100
committerTim Graham <timograham@gmail.com>2017-07-21 08:34:35 -0400
commit3159ad4df6ec05c3eac07b930b4af32739bec7b0 (patch)
tree37c97dc6f7425b8f8529e5f4d21e38a2cbe2b5e5 /tests
parent76236f0db2d6afe14c08393cef676f0f3939f7d8 (diff)
Fixed #27970 -- Allowed QuerySet.in_bulk() to fetch on fields besides primary key.
Diffstat (limited to 'tests')
-rw-r--r--tests/lookup/models.py1
-rw-r--r--tests/lookup/tests.py71
2 files changed, 62 insertions, 10 deletions
diff --git a/tests/lookup/models.py b/tests/lookup/models.py
index 14742e8a8c..2fa5b87755 100644
--- a/tests/lookup/models.py
+++ b/tests/lookup/models.py
@@ -26,6 +26,7 @@ class Article(models.Model):
headline = models.CharField(max_length=100)
pub_date = models.DateTimeField()
author = models.ForeignKey(Author, models.SET_NULL, blank=True, null=True)
+ slug = models.SlugField(unique=True, blank=True, null=True)
class Meta:
ordering = ('-pub_date', 'headline')
diff --git a/tests/lookup/tests.py b/tests/lookup/tests.py
index 70ccf2c02d..289d8dde1b 100644
--- a/tests/lookup/tests.py
+++ b/tests/lookup/tests.py
@@ -16,14 +16,49 @@ class LookupTests(TestCase):
# Create a few Authors.
self.au1 = Author.objects.create(name='Author 1')
self.au2 = Author.objects.create(name='Author 2')
- # Create a couple of Articles.
- self.a1 = Article.objects.create(headline='Article 1', pub_date=datetime(2005, 7, 26), author=self.au1)
- self.a2 = Article.objects.create(headline='Article 2', pub_date=datetime(2005, 7, 27), author=self.au1)
- self.a3 = Article.objects.create(headline='Article 3', pub_date=datetime(2005, 7, 27), author=self.au1)
- self.a4 = Article.objects.create(headline='Article 4', pub_date=datetime(2005, 7, 28), author=self.au1)
- self.a5 = Article.objects.create(headline='Article 5', pub_date=datetime(2005, 8, 1, 9, 0), author=self.au2)
- self.a6 = Article.objects.create(headline='Article 6', pub_date=datetime(2005, 8, 1, 8, 0), author=self.au2)
- self.a7 = Article.objects.create(headline='Article 7', pub_date=datetime(2005, 7, 27), author=self.au2)
+ # Create a few Articles.
+ self.a1 = Article.objects.create(
+ headline='Article 1',
+ pub_date=datetime(2005, 7, 26),
+ author=self.au1,
+ slug='a1',
+ )
+ self.a2 = Article.objects.create(
+ headline='Article 2',
+ pub_date=datetime(2005, 7, 27),
+ author=self.au1,
+ slug='a2',
+ )
+ self.a3 = Article.objects.create(
+ headline='Article 3',
+ pub_date=datetime(2005, 7, 27),
+ author=self.au1,
+ slug='a3',
+ )
+ self.a4 = Article.objects.create(
+ headline='Article 4',
+ pub_date=datetime(2005, 7, 28),
+ author=self.au1,
+ slug='a4',
+ )
+ self.a5 = Article.objects.create(
+ headline='Article 5',
+ pub_date=datetime(2005, 8, 1, 9, 0),
+ author=self.au2,
+ slug='a5',
+ )
+ self.a6 = Article.objects.create(
+ headline='Article 6',
+ pub_date=datetime(2005, 8, 1, 8, 0),
+ author=self.au2,
+ slug='a6',
+ )
+ self.a7 = Article.objects.create(
+ headline='Article 7',
+ pub_date=datetime(2005, 7, 27),
+ author=self.au2,
+ slug='a7',
+ )
# Create a few Tags.
self.t1 = Tag.objects.create(name='Tag 1')
self.t1.articles.add(self.a1, self.a2, self.a3)
@@ -138,6 +173,21 @@ class LookupTests(TestCase):
with self.assertNumQueries(expected_num_queries):
self.assertEqual(Author.objects.in_bulk(authors), authors)
+ def test_in_bulk_with_field(self):
+ self.assertEqual(
+ Article.objects.in_bulk([self.a1.slug, self.a2.slug, self.a3.slug], field_name='slug'),
+ {
+ self.a1.slug: self.a1,
+ self.a2.slug: self.a2,
+ self.a3.slug: self.a3,
+ }
+ )
+
+ def test_in_bulk_non_unique_field(self):
+ msg = "in_bulk()'s field_name must be a unique field but 'author' isn't."
+ with self.assertRaisesMessage(ValueError, msg):
+ Article.objects.in_bulk([self.au1], field_name='author')
+
def test_values(self):
# values() returns a list of dictionaries instead of object instances --
# and you can specify which fields you want to retrieve.
@@ -274,7 +324,8 @@ class LookupTests(TestCase):
'id': self.a5.id,
'author_id': self.au2.id,
'headline': 'Article 5',
- 'pub_date': datetime(2005, 8, 1, 9, 0)
+ 'pub_date': datetime(2005, 8, 1, 9, 0),
+ 'slug': 'a5',
}],
)
@@ -503,7 +554,7 @@ class LookupTests(TestCase):
with self.assertRaisesMessage(
FieldError,
"Cannot resolve keyword 'pub_date_year' into field. Choices are: "
- "author, author_id, headline, id, pub_date, tag"
+ "author, author_id, headline, id, pub_date, slug, tag"
):
Article.objects.filter(pub_date_year='2005').count()