Custom querysets als Bausteine verwenden

Ein Artikel plädiert dafür, Django Custom Querysets zu definieren, so dass sie als atomare Bausteine für andere Abfragen dienen können.

Auch wenn im Beispiel CBVs verwendet werden, eignet sich diese Technik genauso für FBVs.

Leider fehlt der Hinweis darauf, wo man denn diese Querysets nun definieren soll. Nach der Django-Doku empfiehlt sich dies:

class AuthorManager(models.Manager):
    # hier Methoden des Managers definieren, die nicht an Querysets angekettet werden können,
    # z.B. solche, die Querysets „aus dem Nichts erzeugen“

    def get_by_natural_key(self, name: str) -> "Author":
        return self.get(name=name)

class AuthorQuerySet(models.QuerySet):
    def scifi(self) -> models.QuerySet:
        return self.filter(genre="scifi")

class Author(models.Model):
    objects = AuthorManager.from_queryset(AuthorQuerySet)()
    name = models.CharField(max_length=30)
    genre = models.CharField(max_length=10)
    …

In diesem Beispiel lässt sich scifi() sowohl als Manager- als auch als Queryset-Methode verwenden.