diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/raw_query/models.py | 4 | ||||
| -rw-r--r-- | tests/raw_query/tests.py | 13 |
2 files changed, 16 insertions, 1 deletions
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]) |
