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:
71
docs/queries/update.md
Normal file
71
docs/queries/update.md
Normal file
@ -0,0 +1,71 @@
|
||||
# Update
|
||||
|
||||
* `update(each: bool = False, **kwargs) -> int`
|
||||
* `update_or_create(**kwargs) -> Model`
|
||||
* `bulk_update(objects: List[Model], columns: List[str] = None) -> None`
|
||||
* `Model.update() method`
|
||||
* `Model.upsert() method`
|
||||
* `Model.save_related() method`
|
||||
|
||||
## update
|
||||
|
||||
`update(each: bool = False, **kwargs) -> int`
|
||||
|
||||
QuerySet level update is used to update multiple records with the same value at once.
|
||||
|
||||
You either have to filter the QuerySet first or provide a `each=True` flag to update
|
||||
whole table.
|
||||
|
||||
If you do not provide this flag or a filter a `QueryDefinitionError` will be raised.
|
||||
|
||||
Return number of rows updated.
|
||||
|
||||
```Python hl_lines="26-28"
|
||||
--8<-- "../docs_src/queries/docs002.py"
|
||||
```
|
||||
|
||||
!!!warning Queryset needs to be filtered before updating to prevent accidental
|
||||
overwrite.
|
||||
|
||||
To update whole database table `each=True` needs to be provided as a safety switch
|
||||
|
||||
## update_or_create
|
||||
|
||||
`update_or_create(**kwargs) -> Model`
|
||||
|
||||
Updates the model, or in case there is no match in database creates a new one.
|
||||
|
||||
```Python hl_lines="26-32"
|
||||
--8<-- "../docs_src/queries/docs003.py"
|
||||
```
|
||||
|
||||
!!!note Note that if you want to create a new object you either have to pass pk column
|
||||
value or pk column has to be set as autoincrement
|
||||
|
||||
## bulk_update
|
||||
|
||||
`bulk_update(objects: List["Model"], columns: List[str] = None) -> None`
|
||||
|
||||
Allows to update multiple instance at once.
|
||||
|
||||
All `Models` passed need to have primary key column populated.
|
||||
|
||||
You can also select which fields to update by passing `columns` list as a list of string
|
||||
names.
|
||||
|
||||
```python hl_lines="8"
|
||||
# continuing the example from bulk_create
|
||||
# update objects
|
||||
for todo in todoes:
|
||||
todo.completed = False
|
||||
|
||||
# perform update of all objects at once
|
||||
# objects need to have pk column set, otherwise exception is raised
|
||||
await ToDo.objects.bulk_update(todoes)
|
||||
|
||||
completed = await ToDo.objects.filter(completed=False).all()
|
||||
assert len(completed) == 3
|
||||
```
|
||||
|
||||
## Model method
|
||||
|
||||
Reference in New Issue
Block a user