Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Added unit test that confirms a bug in ValuesQuerySets that have extr…

…a(select) specified. If the select dictionary has several fields, Django assigns the wrong values to the select-field names

git-svn-id: http://code.djangoproject.com/svn/django/trunk@5767 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 8831f3ee2c7541de2263d90350d1642ef2c5ede4 1 parent 386a4c6
Adrian Holovaty authored July 27, 2007

Showing 1 changed file with 16 additions and 8 deletions. Show diff stats Hide diff stats

  1. 24  tests/modeltests/lookup/models.py
24  tests/modeltests/lookup/models.py
@@ -132,9 +132,8 @@ def __unicode__(self):
132 132
 [('headline', u'Article 7'), ('id', 7)]
133 133
 [('headline', u'Article 1'), ('id', 1)]
134 134
 
135  
-
136  
-# you can use values() even on extra fields
137  
->>> for d in Article.objects.extra( select={'id_plus_one' : 'id + 1'} ).values('id', 'id_plus_one'):
  135
+# The values() method works with "extra" fields specified in extra(select).
  136
+>>> for d in Article.objects.extra(select={'id_plus_one': 'id + 1'}).values('id', 'id_plus_one'):
138 137
 ...     i = d.items()
139 138
 ...     i.sort()
140 139
 ...     i
@@ -145,15 +144,24 @@ def __unicode__(self):
145 144
 [('id', 3), ('id_plus_one', 4)]
146 145
 [('id', 7), ('id_plus_one', 8)]
147 146
 [('id', 1), ('id_plus_one', 2)]
148  
-
149  
-# however, an exception FieldDoesNotExist will still be thrown 
150  
-# if you try to access non-existent field (field that is neither on the model nor extra)
151  
->>> Article.objects.extra( select={'id_plus_one' : 'id + 1'} ).values('id', 'id_plus_two')
  147
+>>> data = {'id_plus_one': 'id+1', 'id_plus_two': 'id+2', 'id_plus_three': 'id+3',
  148
+...         'id_plus_four': 'id+4', 'id_plus_five': 'id+5', 'id_plus_six': 'id+6',
  149
+...         'id_plus_seven': 'id+7', 'id_plus_eight': 'id+8'}
  150
+>>> result = list(Article.objects.filter(id=1).extra(select=data).values(*data.keys()))[0]
  151
+>>> result = result.items()
  152
+>>> result.sort()
  153
+>>> result
  154
+[('id_plus_eight', 9), ('id_plus_five', 6), ('id_plus_four', 5), ('id_plus_one', 2), ('id_plus_seven', 8), ('id_plus_six', 7), ('id_plus_three', 4), ('id_plus_two', 3)]
  155
+
  156
+# However, an exception FieldDoesNotExist will be thrown if you specify a
  157
+# non-existent field name in values() (a field that is neither in the model
  158
+# nor in extra(select)).
  159
+>>> Article.objects.extra(select={'id_plus_one': 'id + 1'}).values('id', 'id_plus_two')
152 160
 Traceback (most recent call last):
153 161
     ...
154 162
 FieldDoesNotExist: Article has no field named 'id_plus_two'
155 163
 
156  
-# if you don't specify which fields, all are returned
  164
+# If you don't specify field names to values(), all are returned.
157 165
 >>> list(Article.objects.filter(id=5).values()) == [{'id': 5, 'headline': 'Article 5', 'pub_date': datetime(2005, 8, 1, 9, 0)}]
158 166
 True
159 167
 

0 notes on commit 8831f3e

Please sign in to comment.
Something went wrong with that request. Please try again.