﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
24831	Pickling querysets with prefetch_related breaks	Lee Semel	Andriy Sokolovskiy	"In Django 1.8.1, pickling certain querysets that use prefetch_related breaks, with an error message that pickle can't find the through model, with an error like

{{{
    PicklingError: Can't pickle <class 'bug.models.Category_books'>: it's not found as bug.models.Category_books
}}}

With these models 

{{{

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)

class Author(models.Model):
    name = models.CharField(max_length=100)
    books = models.ManyToManyField(Book, related_name='authors')

class Category(models.Model):
    title = models.CharField(max_length=100)
    books = models.ManyToManyField(Book, related_name='categories')

}}}

and these tests

{{{

from django.test import TestCase
import pickle
from .models import Book, Author, Category

class PickleTestCase(TestCase):
    def setUp(self):
        author1 = Author.objects.create(name='Joe Schmoe')
        author2 = Author.objects.create(name='Jane Schmoe')
        book1 = Book.objects.create(title='Whatever')
        book1.authors.add(author1)
        book1.authors.add(author2)
        book2 = Book.objects.create(title='Another')
        book2.authors.add(author1)
        book2.authors.add(author2)
        cat1 = Category.objects.create(title='Category 1')
        cat1.books.add(book1)
        cat1.books.add(book2)
        cat2 = Category.objects.create(title='Category 2')
        cat2.books.add(book1)
        cat2.books.add(book2)

    def tearDown(self):
        Author.objects.all().delete()
        Book.objects.all().delete()
        Category.objects.all().delete()

    def test_pickle(self):
        qs = Category.objects.prefetch_related('books__authors').all()
        pickle.dumps(qs)

    def test_pickle2(self):
        qs = Author.objects.prefetch_related('books__categories').all()
        pickle.dumps(qs)

    def test_pickle3(self):
        qs = Book.objects.prefetch_related('categories__books').all()
        pickle.dumps(qs)


}}}

The second and third tests will fail with the following stack trace

{{{
	

	.EE
	======================================================================
	ERROR: test_pickle2 (bug.tests.PickleTestCase)
	----------------------------------------------------------------------
	Traceback (most recent call last):
	  File ""/Users/lsemel/www/djangobug/bug/tests.py"", line 33, in test_pickle2
	    pickle.dumps(qs)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 1374, in dumps
	    Pickler(file, protocol).dump(obj)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 224, in dump
	    self.save(obj)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 600, in save_list
	    self._batch_appends(iter(obj))
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 615, in _batch_appends
	    save(x)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 600, in save_list
	    self._batch_appends(iter(obj))
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 615, in _batch_appends
	    save(x)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 300, in save
	    self.save_global(obj)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 748, in save_global
	    (obj, module, name))
	PicklingError: Can't pickle <class 'bug.models.Category_books'>: it's not found as bug.models.Category_books

	======================================================================
	ERROR: test_pickle3 (bug.tests.PickleTestCase)
	----------------------------------------------------------------------
	Traceback (most recent call last):
	  File ""/Users/lsemel/www/djangobug/bug/tests.py"", line 37, in test_pickle3
	    pickle.dumps(qs)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 1374, in dumps
	    Pickler(file, protocol).dump(obj)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 224, in dump
	    self.save(obj)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 600, in save_list
	    self._batch_appends(iter(obj))
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 615, in _batch_appends
	    save(x)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 600, in save_list
	    self._batch_appends(iter(obj))
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 615, in _batch_appends
	    save(x)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 331, in save
	    self.save_reduce(obj=obj, *rv)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 419, in save_reduce
	    save(state)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 286, in save
	    f(self, obj) # Call unbound method with explicit self
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 649, in save_dict
	    self._batch_setitems(obj.iteritems())
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 663, in _batch_setitems
	    save(v)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 300, in save
	    self.save_global(obj)
	  File ""/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py"", line 748, in save_global
	    (obj, module, name))
	PicklingError: Can't pickle <class 'bug.models.Category_books'>: it's not found as bug.models.Category_books

	----------------------------------------------------------------------
	Ran 3 tests in 0.075s


}}}

If the deletions in tearDown() are removed, all the tests pass.
"	Bug	closed	Database layer (models, ORM)	1.8	Release blocker	fixed	prefetch_related	me@…	Accepted	1	0	0	0	0	0
