QuerySet API — Aquilia Documentation
Comprehensive guide and documentation for QuerySet API in the Aquilia framework. View API reference, examples, and implementation patterns.
Docs / Models / QuerySet API QuerySet API Immutable, clone-on-write async query builder. Chains return new QuerySet clones; terminal methods (all, first, get, count) execute SQL. Obtaining a QuerySet Access the model objects manager to start a chain: # Fresh QuerySet clone qs = User.objects.filter(active=True) # QuerySet is immutable: every chain returns a new clone q1 = User.objects.filter(active=True) q2 = q1.filter(age__gt=18) # q1 is unaffected q3 = q2.order("-created_at") # q2 is unaffected Chain Methods Method Description : m} ))} Terminal Methods (async) Method Returns Description ))} Lookups Filter using Django-style double-underscore suffixes: # Exact & Case-insensitive exact User.objects.filter(name__exact="Alice") User.objects.filter(name__iexact="alice") # Contained text User.objects.filter(email__icontains="co.com") # Range & IN checks User.objects.filter(age__range=(18, 30)) User.objects.filter(id__in=[1, 2, 3]) # Null check User.objects.filter(active__isnull=False) Q Node Composition Combine conditions using Q nodes and logical operators & (AND), | (OR), and ~ (NOT): from aquilia.models import Q # (active=True AND role="admin") OR email ends with @co.com qs = User.objects.filter( (Q(active=True) & Q(role="admin")) | Q(email__endswith="@co.com") ) # NOT suspended qs = User.objects.filter(~Q(suspended=True)) F Expressions Reference columns directly in SQL comparison or updates via F : from aquilia.models import F # Compare field values await User.objects.filter(login_count__gt=F("post_count")).all() # Atomic database increments await Product.objects.filter(id=42).update(stock=F("stock") - 1) Custom QuerySets Extend QuerySet to reuse domain queries: from aquilia.models import QuerySet, Manager class ArticleQuerySet(QuerySet): def published(self): return self.filter(status="published") def recent(self): return self.order("-published_at") class Article(Model): table = "articles" # Attach to objects descriptor objects = Manager.from_queryset(ArticleQuerySet)() # Usage posts = await Article.objects.published().recent().all() Fields Relationships )
Go to Homepage