Skip to content


Projector functions take a model instance as their single argument and return a dictionary mapping one or more keys to one or more values derived from that instance, usually via producer functions. The projectors module contains higher-order functions that create projectors from producers, and compose projectors together.

Import like this: from django_readers import projectors

projectors.producer_to_projector(key, producer)

Given a key and a producer function, return a projector which calls the producer function on the given instance and returns a dictionary containing a single key mapping to this value.

instance = Book(title="Pro Django")
produce_title = producers.attr("title")
project = projectors.producer_to_projector("title", produce_title)
projection = project(instance)
# prints {"title": "Pro Django"}


Takes multiple projectors provided as arguments and return another projector which calls each projector in turn and merges the resulting dictionaries.

instance = Book(
    title="Pro Django",, 7, 10),
produce_title = producers.attr("title")
produce_pub_date: producers.attr("publication_date")
project = projectors.combine(
    projectors.producer_to_projector("title", produce_title),
    projectors.producer_to_projector("publication_date", produce_pub_date),
projection = project(instance)
# prints {"title": "Pro Django", "publication_date":, 7, 10)}


A projector function which just returns an empty dictionary. Useful for including pairs in a spec which affect only the queryset, not the projection.