﻿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
8070	related objects passed to model init are not cached/accessible	Gary Wilson	Gary Wilson	"Models:
{{{
#!python
from django.db import models

class Color(models.Model):
    name = models.CharField(max_length=10)

class Knight(models.Model):
    favorite = models.ForeignKey(Color)
}}}

Neither saved or unsaved related objects get cached:
{{{
#!python
# Unsaved object.
>>> k = Knight(favorite=Color())
>>> hasattr(k, '_favorite_cache')
False

# Saved object.
>>> k = Knight(favorite=Color.objects.create(name='blue'))
>>> hasattr(k, '_favorite_cache')
False

# But assignment with saved or unsaved objects does cache correctly.
>>> k = Knight()
>>> k.favorite = Color()
>>> hasattr(k, '_favorite_cache')
True
>>> k = Knight()
>>> k.favorite = Color.objects.create(name='blue')
>>> hasattr(k, '_favorite_cache')
True
}}}

Also, in the saved related object case above, we do an extra query to refetch the object by id.

There's also a problem when trying to access the field when it was passed an unsaved object in the init:

{{{
#!python
# Unsaved object.
>>> k = Knight(favorite=Color())
>>> k.favorite
Traceback (most recent call last):
...
DoesNotExist

# Saved object.
>>> k = Knight(favorite=Color.objects.create(name='blue'))
>>> k.favorite
<Color: blue>
}}}

The attached patch does both:
 * Caches saved or unsaved related object passed to the Model init.
 * Allows unsaved related objects to be accessed when they were passed to the Model init."	Uncategorized	closed	Core (Other)	dev	Normal	fixed			Ready for checkin	1	0	0	0	0	0
