class Necklace(models.Model): ### FIELDS ### ... beads = models.ManyToManyField(Bead, through="BeadSet", blank=True) ... ### CACHING METHODS ### def get_beadsets(self): # cache beadsets query to _beadsets try: _check = self._beadsets except: self._beadsets = BeadSet.objects.filter(necklace=self).select_related() return self._beadsets def get_beads(self): # cache beads query to _beads try: _check = self._beads except: self._beads = self.beads.all().select_related() return self._beads ...