Skip to main content

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​