Example #1
0
    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)