Reduce queries on datagrids by pre-populating a cache of fetched objects.

Review Request #3218 — Created July 15, 2012 and submitted — Latest diff uploaded

Information

Djblets
release-0.6.x

Reviewers

Reduce queries on datagrids by pre-populating a cache of fetched objects.

Many columns on the datagrid render related objects, such as a user. We
had a cache in place that would prevent duplicate lookups of objects
with the same ID, but we'd still do one query per unique ID.

Now we allow columns to collect the data before rendering, based on the
objects being displayed. By default, this will loop through the objects,
build a list of all IDs that will be displayed, and then populate the
existing cache with those fetched objects. This reduces the query count
to at max one per column for all cases using ForeignKeys.

ManyToManyFields is another matter entirely, and will take more
specialized work.
Tested this with all the datagrids on my copy of Review Board. Everything
worked great. I verified through the list of SQL queries that we only
had one per column that used a ForeignKey. ManyToManyFields still caused
many more queries.

Unit tests also passed.