def test_generic_related_objects(self): """ Check that get_generic_related_objects correctly populates the _assets attribute of each element with a GenericRelation, in fewer queries than simply iterating through and checking x.assets.all(). """ articles = Article.objects.all() assets_original = [] for article in articles: assets_original.extend(list(article.assets.all())) self.assertEquals(len(connection.queries), 22) self.assertEquals(len(assets_original), 100) reset_queries() ContentType.objects.clear_cache() get_generic_related_objects(articles, 'assets') assets_efficient = [] for article in articles: assets_efficient.extend(article._assets) for asset in article._assets: self.assertEquals(asset.object_id, article.id) self.assertEquals(len(assets_efficient), 100) self.assertEquals(assets_efficient, assets_original) # one query to get contenttype, then one to get all assets self.assertEquals(len(connection.queries), 2) self.assertRaises(RelationNotFound, get_generic_related_objects, articles, 'nonexistentrelationship')
def get_generic_related_objects(queryset, relation_name): utils.get_generic_related_objects(queryset, relation_name)