Ticket #9192: more_info.txt

File more_info.txt, 6.6 KB (added by Brent Hagany, 16 years ago)

Test case models, demonstration of error, and stack trace

Line 
1# models.py
2
3from django.db import models
4
5class ModelOne(models.Model):
6 field = models.CharField(max_length=10)
7
8class ModelTwo(models.Model):
9 model_one = models.ForeignKey(ModelOne)
10
11class ModelThree(models.Model):
12 model_one = models.ForeignKey(ModelOne)
13
14
15# Then, in ./manage.py shell (the name of my test app is "exclude"):
16
17In[0]: from exclude.models import ModelTwo
18
19In [1]: ModelTwo.objects.filter(model_one__modelthree__id=1)
20Out[1]: []
21
22In [2]: ModelTwo.objects.exclude(model_one__modelthree__id=1)
23Out[2]: ERROR: Internal Python error in the inspect module.
24Below is the traceback from this internal error.
25
26Traceback (most recent call last):
27 File "/usr/lib/python2.5/site-packages/IPython/ultraTB.py", line 635, in text
28 locals,formatvalue=var_repr))
29 File "/usr/lib/python2.5/inspect.py", line 812, in formatargvalues
30 specs.append(strseq(args[i], convert, join))
31 File "/usr/lib/python2.5/inspect.py", line 767, in strseq
32 return convert(object)
33 File "/usr/lib/python2.5/inspect.py", line 809, in convert
34 return formatarg(name) + formatvalue(locals[name])
35KeyError: 'connection'
36
37IPython's exception reporting continues...
38
39---------------------------------------------------------------------------
40OperationalError Traceback (most recent call last)
41
42/home/brent/django/testing/<ipython console> in <module>()
43
44/usr/lib/python2.5/site-packages/IPython/Prompts.py in __call__(self, arg)
45 533
46 534 # and now call a possibly user-defined print mechanism
47--> 535 manipulated_val = self.display(arg)
48 536
49 537 # user display hooks can change the variable to be stored in
50
51/usr/lib/python2.5/site-packages/IPython/Prompts.py in _display(self, arg)
52 559 return IPython.generics.result_display(arg)
53 560 except TryNext:
54--> 561 return self.shell.hooks.result_display(arg)
55 562
56 563 # Assign the default display method:
57
58/usr/lib/python2.5/site-packages/IPython/hooks.py in __call__(self, *args, **kw)
59 132 #print "prio",prio,"cmd",cmd #dbg
60 133 try:
61--> 134 ret = cmd(*args, **kw)
62 135 return ret
63 136 except ipapi.TryNext, exc:
64
65/usr/lib/python2.5/site-packages/IPython/hooks.py in result_display(self, arg)
66 160
67 161 if self.rc.pprint:
68--> 162 out = pformat(arg)
69 163 if '\n' in out:
70 164 # So that multi-line strings line up with the left column of
71
72/usr/lib/python2.5/pprint.py in pformat(self, object)
73 109 def pformat(self, object):
74 110 sio = _StringIO()
75--> 111 self._format(object, sio, 0, 0, {}, 0)
76 112 return sio.getvalue()
77 113
78
79/usr/lib/python2.5/pprint.py in _format(self, object, stream, indent, allowance, context, level)
80 127 self._readable = False
81 128 return
82--> 129 rep = self._repr(object, context, level - 1)
83 130 typ = _type(object)
84 131 sepLines = _len(rep) > (self._width - 1 - indent - allowance)
85
86/usr/lib/python2.5/pprint.py in _repr(self, object, context, level)
87 193 def _repr(self, object, context, level):
88 194 repr, readable, recursive = self.format(object, context.copy(),
89--> 195 self._depth, level)
90 196 if not readable:
91 197 self._readable = False
92
93/usr/lib/python2.5/pprint.py in format(self, object, context, maxlevels, level)
94 205 and whether the object represents a recursive construct.
95 206 """
96--> 207 return _safe_repr(object, context, maxlevels, level)
97 208
98 209
99
100/usr/lib/python2.5/pprint.py in _safe_repr(object, context, maxlevels, level)
101 290 return format % _commajoin(components), readable, recursive
102 291
103--> 292 rep = repr(object)
104 293 return rep, (rep and not rep.startswith('<')), False
105 294
106
107/usr/lib/python2.5/site-packages/django/db/models/query.py in __repr__(self)
108 142
109 143 def __repr__(self):
110--> 144 return repr(list(self))
111 145
112 146 def __len__(self):
113
114/usr/lib/python2.5/site-packages/django/db/models/query.py in __len__(self)
115 154 self._result_cache = list(self.iterator())
116 155 elif self._iter:
117--> 156 self._result_cache.extend(list(self._iter))
118 157 return len(self._result_cache)
119 158
120
121/usr/lib/python2.5/site-packages/django/db/models/query.py in iterator(self)
122 267 extra_select = self.query.extra_select.keys()
123 268 index_start = len(extra_select)
124--> 269 for row in self.query.results_iter():
125 270 if fill_cache:
126 271 obj, _ = get_cached_row(self.model, row, index_start,
127
128/usr/lib/python2.5/site-packages/django/db/models/sql/query.py in results_iter(self)
129 204 resolve_columns = hasattr(self, 'resolve_columns')
130 205 fields = None
131--> 206 for rows in self.execute_sql(MULTI):
132 207 for row in rows:
133 208 if resolve_columns:
134
135/usr/lib/python2.5/site-packages/django/db/models/sql/query.py in execute_sql(self, result_type)
136 1721
137 1722 cursor = self.connection.cursor()
138-> 1723 cursor.execute(sql, params)
139 1724
140 1725 if not result_type:
141
142/usr/lib/python2.5/site-packages/django/db/backends/mysql/base.py in execute(self, query, args)
143 81 def execute(self, query, args=None):
144 82 try:
145---> 83 return self.cursor.execute(query, args)
146 84 except Database.OperationalError, e:
147 85 # Map some error codes to IntegrityError, since they seem to be
148
149/usr/lib/python2.5/site-packages/MySQLdb/cursors.py in execute(self, query, args)
150 164 del tb
151 165 self.messages.append((exc, value))
152--> 166 self.errorhandler(self, exc, value)
153 167 self._executed = query
154 168 if not self._defer_warnings: self._warning_check()
155
156/usr/lib/python2.5/site-packages/MySQLdb/connections.py in defaulterrorhandler(***failed resolving arguments***)
157 33 del cursor
158 34 del connection
159---> 35 raise errorclass, errorvalue
160 36
161 37
162
163OperationalError: (1054, "Unknown column 'U1.id' in 'on clause'")
164
165# Here is the query that django generates. As you can see, it tried to use the U1 alias for a table, which it did not create.
166
167'SELECT `exclude_modeltwo`.`id`, `exclude_modeltwo`.`model_one_id`
168FROM `exclude_modeltwo`
169WHERE NOT (`exclude_modeltwo`.`model_one_id`
170 IN (SELECT U2.`model_one_id`
171 FROM `exclude_modeltwo` U0
172 INNER JOIN `exclude_modelthree` U2 ON (U1.`id` = U2.`model_one_id`)
173 WHERE U2.`id` = %s ))'
Back to Top