Skip to content

Commit

Permalink
Fixed #14729 -- RawQuerySet.__repr__ fails when params passed as list…
Browse files Browse the repository at this point in the history
…. Thanks, intgr for ticket and accuser for patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16088 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jezdez committed Apr 22, 2011
1 parent c8092b8 commit c77372c
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 2 deletions.
2 changes: 1 addition & 1 deletion django/db/models/query.py
Expand Up @@ -1385,7 +1385,7 @@ def __iter__(self):
yield instance yield instance


def __repr__(self): def __repr__(self):
return "<RawQuerySet: %r>" % (self.raw_query % self.params) return "<RawQuerySet: %r>" % (self.raw_query % tuple(self.params))


def __getitem__(self, k): def __getitem__(self, k):
return list(self)[k] return list(self)[k]
Expand Down
2 changes: 1 addition & 1 deletion django/db/models/sql/query.py
Expand Up @@ -74,7 +74,7 @@ def __iter__(self):
return iter(result) return iter(result)


def __repr__(self): def __repr__(self):
return "<RawQuery: %r>" % (self.sql % self.params) return "<RawQuery: %r>" % (self.sql % tuple(self.params))


def _execute_query(self): def _execute_query(self):
self.cursor = connections[self.using].cursor() self.cursor = connections[self.using].cursor()
Expand Down
17 changes: 17 additions & 0 deletions tests/regressiontests/queries/tests.py
Expand Up @@ -1317,6 +1317,23 @@ def test_ticket3739(self):
self.assertIsNot(q1, q1.all()) self.assertIsNot(q1, q1.all())




class RawQueriesTests(TestCase):
def setUp(self):
n1 = Note.objects.create(note='n1', misc='foo', id=1)

def test_ticket14729(self):
# Test representation of raw query with one or few parameters passed as list
query = "SELECT * FROM queries_note WHERE note = %s"
params = ['n1']
qs = Note.objects.raw(query, params=params)
self.assertEqual(repr(qs), "<RawQuerySet: 'SELECT * FROM queries_note WHERE note = n1'>")

query = "SELECT * FROM queries_note WHERE note = %s and misc = %s"
params = ['n1', 'foo']
qs = Note.objects.raw(query, params=params)
self.assertEqual(repr(qs), "<RawQuerySet: 'SELECT * FROM queries_note WHERE note = n1 and misc = foo'>")


class GeneratorExpressionTests(TestCase): class GeneratorExpressionTests(TestCase):
def test_ticket10432(self): def test_ticket10432(self):
# Using an empty generator expression as the rvalue for an "__in" # Using an empty generator expression as the rvalue for an "__in"
Expand Down

0 comments on commit c77372c

Please sign in to comment.