Can't be sure without the models, but if enty.tags is a rel field 
(ForeignKey, ManytoMany), doing entry.tags_list will probably cause that 
second query.

Also, where is the name tags_list coming from? In the Entry query I only 
see "zinnia_entry"."tags", but to get a rel mapping I would normally call 
entry.tags_set, not tags_list.

 

On Wednesday, September 11, 2013 10:51:54 AM UTC-5, [email protected] wrote:
>
> (I'm porting an app and originally posted this in its mailing list but 
> it's been a day and I haven't gotten a response. If that's not a good 
> enough reason for cross-posting, sorry and feel free to ignore me.)
>
> I'm using python 3.3 and django 1.6 .
>
> I have this code:
> with self.assertNumQueries(1) as q:
>     all_entries = list(Entry.objects.all())
>     print("All entries: ", all_entries)
>     for entry in all_entries:
>         print("Entry: ", entry, " , Tags list: ", entry.tags_list)
>     for query in  q.captured_queries:
>         print(query, "\n")
>
> which produces this output (slightly edited for prettiness):
>
> All entries:  [<Entry: My entry: published>]
> Entry:  My entry: published , Tags list:  []
>
> {'time': '0.000', 'sql': 'QUERY = \'SELECT "zinnia_entry"."id", 
> "zinnia_entry"."title", "zinnia_entry"."slug", "zinnia_entry"."status", 
> "zinnia_entry"."start_publication", "zinnia_entry"."end_publication", 
> "zinnia_entry"."creation_date", "zinnia_entry"."last_update", 
> "zinnia_entry"."content", "zinnia_entry"."comment_enabled", 
> "zinnia_entry"."pingback_enabled", "zinnia_entry"."trackback_enabled", 
> "zinnia_entry"."comment_count", "zinnia_entry"."pingback_count", 
> "zinnia_entry"."trackback_count", "zinnia_entry"."excerpt", 
> "zinnia_entry"."image", "zinnia_entry"."featured", "zinnia_entry"."tags", 
> "zinnia_entry"."login_required", "zinnia_entry"."password", 
> "zinnia_entry"."content_template", "zinnia_entry"."detail_template" FROM 
> "zinnia_entry" ORDER BY "zinnia_entry"."creation_date" DESC\' - PARAMS = 
> ()'} 
>
> {'time': '0.000', 'sql': 'QUERY = \'SELECT "tagging_tag"."id", 
> "tagging_tag"."name" FROM "tagging_tag" INNER JOIN "tagging_taggeditem" ON 
> ( "tagging_tag"."id" = "tagging_taggeditem"."tag_id" ) WHERE 
> ("tagging_taggeditem"."content_type_id" = %s  AND 
> "tagging_taggeditem"."object_id" = %s ) ORDER BY "tagging_tag"."name" ASC\' 
> - PARAMS = (12, 1)'} 
>
> (I get the same queries if I don't print out the entry or its tag list. I 
> just retained the print loop to show that it doesn't have any tags)
>
> Entry.objects is the standard db.models.Manager type and as far as I can 
> tell, it has not been monkeypatched anywhere.
>
> Obviously, I got two queries instead of just the one that I was expecting. 
> I can't find any reason for the second query. I'm especially confused 
> because the entry clearly doesn't even have a tag (as demonstrated by the 
> empty tags_list). Would anyone happen to have any idea how querying for one 
> model can lead to a query for another model type? If not, do you have any 
> suggestions for me in debugging the issue?
>
> I've already checked if the __str__ method of the Model somehow references 
> the object mentioned in the second query and it doesn't. (I can remove the 
> print calls and it'll still be triggered anyway.)
>
> Thanks
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to