Code

Ticket #9192: more_info.txt

File more_info.txt, 6.6 KB (added by bhagany, 6 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 ))'