﻿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
3369	reverse caching of foreign keys	wbyoung@…	nobody	"It would be nice if Django were to cache the reverse value of foreign keys when they're looked up.  That might not be entirely clear, so let me give an example:

{{{
class Company(Model):
    name = models.CharField(maxlength=100)

class Employee(Model):
    company = models.ForeignKey(Company)


c = Company.objects.all()[0]
e = c.employee_set.all()[0]

# e now really must have a company of c... there's no reason it wouldn't be c
e.company # accesses the database
}}}

I tried implementing this, but got lost in some of the model code.  My approach was to use an auto_cache 'filter' for QuerySets.  The above code would look like this:

{{{
c = Company.objects.all()[0]
e = c.employee_set.auto_cache(company=c).all()[0]

e.company # no database accesses
}}}

Which eventually I would have made automatic for all sets.  I got far enough to realize that each foreign key will potentially query the database even after an attribute has explicitly been assigned.  For example:

{{{
c = Company.objects.all()[0]
e = c.employee_set.all()[0]

new_company = Company()
e.company = new_company
e.company == new_company # database accesses for e.company and not equal to the new object
}}}

I'd love to see a feature like this, so if it's not something that you all want to implement, point me in the right direction."		closed	Database layer (models, ORM)	dev		duplicate		ferringb@…	Design decision needed	1	0	0	0	0	0
