Custom QuerySet and Manager: write one.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # ====================================================================== # Q: Custom QuerySet and Manager: write one. # ====================================================================== class OrderQuerySet(models.QuerySet): def paid(self): return self.filter(status='paid') def for_company(self, company): return self.filter(customer__company=company) def with_totals(self): return self.annotate(total=Sum(F('items__quantity') * F('items__unit_price'))) class Order(models.Model): ... objects = OrderQuerySet.as_manager() Order.objects.for_company(c).paid().with_totals() # chainable |