

def _get_m2m_attr(self, related, attr):
    'Function that can be curried to provide the source accessor or DB column name for the m2m table'
    cache_attr = ('_m2m_%s_cache' % attr)
    if hasattr(self, cache_attr):
        return getattr(self, cache_attr)
    for f in self.rel.through._meta.fields:
        if (hasattr(f, 'rel') and f.rel and (f.rel.to == related.model)):
            setattr(self, cache_attr, getattr(f, attr))
            return getattr(self, cache_attr)

dataset/ETHPy150Open AppScale/appscale/AppServer/lib/django-1.5/django/db/models/fields/related.py ManyToManyField._get_m2m_attr/original