This logic was completely wrong, too. We should include the field if it isn't from deferred table. Or if it is from deferred table, then we should still include it if the column is in that table's loaded columns.

Unfortunately there is a much harder bug to solve here - only_load maps tables to columns, but what happens if you have the same table multiple times in the query? For example .defer('parent__col1', 'parent__parent__col2') in parent = ForeignKey('self') tree model? Luckily not this ticket's problem.