﻿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
21102	Cannot pickle/unpickle a QuerySet that prefetches related objects more than once (Pickling Idempotency)	Minjong Chung	Anssi Kääriäinen <anssi.kaariainen@…>	"https://code.djangoproject.com/ticket/20157
https://code.djangoproject.com/ticket/20257
https://github.com/django/django/commit/bac187c0d8e829fb3ca2ca82965eabbcbcb6ddd5#django/db/models/query.py

The patch above introduced a new bug for pickling idempotency. Simply put, a QuerySet that prefetches related objects cannot be pickled and unpickled more than once. The second pickling attempt raises an exception.

With the follow models:

{{{
#!python

class Post(models.Model):
    post_date = models.DateTimeField(default=datetime.datetime.now)

class Material(models.Model):
    post = models.ForeignKey(Post, related_name='materials')

}}}


This code won't run smoothly:

{{{
#!python

post = Post.objects.create()
posts = Post.objects.all()
posts = posts.prefetch_related('materials')
posts = pickle.loads(pickle.dumps(posts))
posts = pickle.loads(pickle.dumps(posts))

}}}"	Bug	closed	Database layer (models, ORM)	1.5	Release blocker	fixed	ORM, pickle, cache		Ready for checkin	1	0	0	0	0	0
