I have a custom manager. I want to use it for related objects. I found use_for_related_fields in docs. But it does not work the way I used it:
class Random
Also, in the custom manager, make sure to access the queryset via the self.get_query_set() proxy method when implementing custom filters to be called from related manager:
class EventManager(models.Manager):
use_for_related_fields = True
def visible_events(self):
today = datetime.date.today()
# don't do this !!!
# unsuitable for related managers as could retrieve extraneous objects
# qs = super(EventManager, self).get_query_set()
# Use queryset proxy method as follows, instead:
qs = self.get_query_set()
qs = qs.filter(visible_from__lte=today, visible_to__gte=today)
return qs
class Event(models.Model):
visible_from = models.DateField(_(u'visible from'), null=False, blank=False)
visible_to = models.DateField(_(u'visible to'), null=False, blank=False)
concepts = models.ManyToManyField(Concept, through='ConceptEventRegistration')
objects = EventManager()
Sample usage:
my_concept = Concept.objects.get(id=1)
# retrieve all events related to the object
my_concept.event_set.all()
# retrieve all visible events related to the object
my_concept.event_set.visible_events()