QuerySet
The QuerySet type provides a type-safe way to query your database. All QuerySet methods return a new QuerySet instance, allowing method chaining.
Methods​
Filtering​
Filter​
Add filter conditions:
qs := User.Objects.Filter(User.Fields.IsActive.Equals(true))
Multiple filters are combined with AND:
qs := User.Objects.
Filter(User.Fields.IsActive.Equals(true)).
Filter(User.Fields.IsStaff.Equals(true))
Exclude​
Exclude objects matching conditions:
qs := User.Objects.Exclude(User.Fields.IsDeleted.Equals(true))
Ordering​
OrderBy​
Order results:
qs := User.Objects.OrderBy("username")
qs := User.Objects.OrderBy("username", "-date_joined")
Use - prefix for descending order.
Limiting​
Limit​
Limit number of results:
qs := User.Objects.Limit(10)
Offset​
Skip results:
qs := User.Objects.Offset(20)
Distinct​
Get distinct results:
qs := User.Objects.Distinct()
Field Selection​
Only​
Select only specified fields:
qs := User.Objects.Only("username", "email")
Defer​
Exclude specified fields:
qs := User.Objects.Defer("password", "secret")
Relations​
SelectRelated​
Use JOIN for foreign keys:
qs := Post.Objects.SelectRelated("author")
PrefetchRelated​
Prefetch many relations:
qs := User.Objects.PrefetchRelated("posts", "profile")
Execution​
All​
Get all results:
users, err := User.Objects.All(ctx)
Get​
Get single result by ID:
user, err := User.Objects.Get(ctx, 1)
Returns error if not found or multiple results.
First​
Get first result:
user, err := User.Objects.First(ctx)
Last​
Get last result:
user, err := User.Objects.Last(ctx)
Count​
Count results:
count, err := User.Objects.Count(ctx)
Exists​
Check if any results exist:
exists, err := User.Objects.Exists(ctx)
Aggregations​
Aggregate​
Perform aggregations:
result, err := User.Objects.
Aggregate(
aggregates.Count("id"),
aggregates.Avg("age"),
aggregates.Max("date_joined"),
).
Get(ctx)
Updates​
Update​
Bulk update:
affected, err := User.Objects.
Filter(User.Fields.IsActive.Equals(false)).
Update(ctx, map[string]interface{}{
"is_active": true,
})
Deletion​
Delete​
Bulk delete:
affected, err := User.Objects.
Filter(User.Fields.IsDeleted.Equals(true)).
Delete(ctx)
Field Expressions​
Equality​
User.Fields.Username.Equals("john")
User.Fields.Age.NotEquals(18)
Comparison​
User.Fields.Age.Greater(18)
User.Fields.Age.GreaterOrEqual(18)
User.Fields.Age.Less(65)
User.Fields.Age.LessOrEqual(65)
Null Checks​
User.Fields.LastLogin.IsNull()
User.Fields.LastLogin.IsNotNull()
Membership​
User.Fields.Status.In("active", "pending")
User.Fields.Status.NotIn("deleted", "banned")
String Operations​
User.Fields.Username.Contains("john")
User.Fields.Username.StartsWith("admin")
User.Fields.Username.EndsWith(".com")
User.Fields.Username.IContains("JOHN")
Range​
User.Fields.Age.Range(18, 65)
User.Fields.CreatedAt.Range(startDate, endDate)
Combining Conditions​
User.Fields.IsActive.Equals(true).And(User.Fields.IsStaff.Equals(true))
User.Fields.IsActive.Equals(true).Or(User.Fields.IsStaff.Equals(true))
User.Fields.IsActive.Equals(true).Not()
See Also​
- Manager Reference - Manager methods
- Queries Guide - Query usage guide