summaryrefslogtreecommitdiffstats
path: root/posts/Silly_django_confusion.mdwn
blob: 3939fdb3f73b103366f9b72bae755aeea1cd57d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
I'm setting up a testing environment for work, using fixtures to save
and load test data and I got a little stumped by something I ran into.

I had exported one of the database tables we use to a json file that I
was going to import into a fresh new database to test with. When I
imported it everything seemed fine, except when looking at the actual
page. So this is what I found:

<pre class="src src-sql">SELECT * FROM app_table;
    =&gt; 3 rows of data</pre>

<pre class="src src-python"><span class="org-keyword">from</span> app.models <span class="org-keyword">import</span> Table

Table.objects.count()
    =&gt; 3

Table.objects.<span class="org-builtin">all</span>()
    =&gt; []</pre>

This is weird. So I looked at the `django.db.connection.queries`
property and I realized that it was doing a join since the model
subclasses another:

<pre class="src src-python"><span class="org-keyword">from</span> django.db <span class="org-keyword">import</span> models

<span class="org-keyword">from</span> app.models <span class="org-keyword">import</span> SuperTable

<span class="org-keyword">class</span> <span class="org-type">Table</span>(SuperTable):...</pre>


Which, of course, means that in order to get the complete `Table`
instance, the related `SuperTable` instance is also required, but in
order to do a `COUNT` of `app_table` it isn't necessary. And that's
where the inconsistency came from, now that I've also copied the
contents of `SuperTable` everything is fine again.

[[!meta date="2012-04-24 15:51:00"]]
[[!tag python django coding]]