From e063ac2fae007a2eecaeab5ce17064c31230ce29 Mon Sep 17 00:00:00 2001 From: Matt Johnson Date: Wed, 22 Jul 2015 11:54:42 -0700 Subject: Fixed #12768 -- Fixed QuerySet.raw() regression on FK with custom db_column. --- tests/raw_query/models.py | 4 ++++ tests/raw_query/tests.py | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/raw_query/models.py b/tests/raw_query/models.py index 1e5e176bcf..2a888088ef 100644 --- a/tests/raw_query/models.py +++ b/tests/raw_query/models.py @@ -23,6 +23,10 @@ class Book(models.Model): opening_line = models.TextField() +class BookFkAsPk(models.Model): + book = models.ForeignKey(Book, primary_key=True, db_column="not_the_default") + + class Coffee(models.Model): brand = models.CharField(max_length=255, db_column="name") diff --git a/tests/raw_query/tests.py b/tests/raw_query/tests.py index 2027a32d2b..94f21f9a71 100644 --- a/tests/raw_query/tests.py +++ b/tests/raw_query/tests.py @@ -5,7 +5,7 @@ from datetime import date from django.db.models.query_utils import InvalidQuery from django.test import TestCase, skipUnlessDBFeature -from .models import Author, Book, Coffee, FriendlyAuthor, Reviewer +from .models import Author, Book, BookFkAsPk, Coffee, FriendlyAuthor, Reviewer class RawQueryTests(TestCase): @@ -274,3 +274,14 @@ class RawQueryTests(TestCase): list(Book.objects.raw('SELECT id FROM (SELECT * FROM raw_query_book WHERE paperback IS NOT NULL) sq')) except InvalidQuery: self.fail("Using a subquery in a RawQuerySet raised InvalidQuery") + + def test_db_column_name_is_used_in_raw_query(self): + """ + Regression test that ensures the `column` attribute on the field is + used to generate the list of fields included in the query, as opposed + to the `attname`. This is important when the primary key is a + ForeignKey field because `attname` and `column` are not necessarily the + same. + """ + b = BookFkAsPk.objects.create(book=self.b1) + self.assertEqual(list(BookFkAsPk.objects.raw('SELECT not_the_default FROM raw_query_bookfkaspk')), [b]) -- cgit v1.3