add tests for cross model forward references, add docs for processing forwardrefs, wip on refactoring queries into separate pages based on functionality
This commit is contained in:
94
docs/queries/pagination-and-rows-number.md
Normal file
94
docs/queries/pagination-and-rows-number.md
Normal file
@ -0,0 +1,94 @@
|
||||
#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.
|
||||
Reference in New Issue
Block a user