95 lines
2.8 KiB
Markdown
95 lines
2.8 KiB
Markdown
#Pagination and rows number
|
|
|
|
* `paginate(page: int) -> QuerySet`
|
|
* `limit(limit_count: int) -> QuerySet`
|
|
* `offset(offset: int) -> QuerySet`
|
|
* `get(**kwargs): -> Model`
|
|
* `first(): -> Model`
|
|
|
|
|
|
## paginate
|
|
|
|
`paginate(page: int, page_size: int = 20) -> QuerySet`
|
|
|
|
Combines the `offset` and `limit` methods based on page number and size
|
|
|
|
```python
|
|
tracks = await Track.objects.paginate(3).all()
|
|
# will return 20 tracks starting at row 41
|
|
# (with default page size of 20)
|
|
```
|
|
|
|
Note that `paginate(2)` is equivalent to `offset(20).limit(20)`
|
|
|
|
## limit
|
|
|
|
`limit(limit_count: int, limit_raw_sql: bool = None) -> QuerySet`
|
|
|
|
You can limit the results to desired number of parent models.
|
|
|
|
To limit the actual number of database query rows instead of number of main models
|
|
use the `limit_raw_sql` parameter flag, and set it to `True`.
|
|
|
|
```python
|
|
tracks = await Track.objects.limit(1).all()
|
|
# will return just one Track
|
|
```
|
|
|
|
!!!note
|
|
All methods that do not return the rows explicitly returns a QueySet instance so you can chain them together
|
|
|
|
So operations like `filter()`, `select_related()`, `limit()` and `offset()` etc. can be chained.
|
|
|
|
Something like `Track.object.select_related("album").filter(album__name="Malibu").offset(1).limit(1).all()`
|
|
|
|
## offset
|
|
|
|
`offset(offset: int, limit_raw_sql: bool = None) -> QuerySet`
|
|
|
|
You can also offset the results by desired number of main models.
|
|
|
|
To offset the actual number of database query rows instead of number of main models
|
|
use the `limit_raw_sql` parameter flag, and set it to `True`.
|
|
|
|
```python
|
|
tracks = await Track.objects.offset(1).limit(1).all()
|
|
# will return just one Track, but this time the second one
|
|
```
|
|
|
|
!!!note
|
|
All methods that do not return the rows explicitly returns a QueySet instance so you can chain them together
|
|
|
|
So operations like `filter()`, `select_related()`, `limit()` and `offset()` etc. can be chained.
|
|
|
|
Something like `Track.object.select_related("album").filter(album__name="Malibu").offset(1).limit(1).all()`
|
|
|
|
|
|
|
|
## get
|
|
|
|
`get(**kwargs): -> Model`
|
|
|
|
Get's the first row from the db meeting the criteria set by kwargs.
|
|
|
|
If no criteria set it will return the last row in db sorted by pk.
|
|
|
|
Passing a criteria is actually calling filter(**kwargs) method described below.
|
|
|
|
```python
|
|
track = await Track.objects.get(name='The Bird')
|
|
# note that above is equivalent to await Track.objects.filter(name='The Bird').get()
|
|
track2 = track = await Track.objects.get()
|
|
track == track2 # True since it's the only row in db in our example
|
|
```
|
|
|
|
!!!warning
|
|
If no row meets the criteria `NoMatch` exception is raised.
|
|
|
|
If there are multiple rows meeting the criteria the `MultipleMatches` exception is raised.
|
|
|
|
## first
|
|
|
|
`first(): -> Model`
|
|
|
|
Gets the first row from the db ordered by primary key column ascending.
|