dabapps / django-readers

A lightweight function-oriented toolkit for better organisation of business logic and efficient selection and projection of data in Django projects.
https://www.django-readers.org
BSD 2-Clause "Simplified" License
186 stars 7 forks source link

Add field_display pair function and method projector function. #16

Closed j4mie closed 3 years ago

j4mie commented 3 years ago

Examples:

class Widget(models.Model):
    name = models.CharField(max_length=100)

    def shouty_name(self):
        return self.name.upper()

widget = Widget.objects.create(name="test")
project = projectors.method("shouty_name")
project(widget)  # returns {"shouty_name": "TEST"}

and...

class Widget(models.Model):
    trim_level = models.IntegerField(choices=[(0, "Standard"), (1, "Deluxe")])

Widget.objects.create(trim_level=1)
prepare, project = pairs.field_display("trim_level")
queryset = prepare(Widget.objects.all())
project(queryset.get())  # returns {"trim_level_display": "Deluxe"}