Using existing field values in django update query
django, django-models
Solution
You can do this using an F expression:
from django.db.models import F
tasks = Task.objects.filter(task_definition__cascades=False)
.update(shared_task_id=F('id'))
There are some restrictions on what you can do with `F` objects in an `update` call, but it'll work fine for this case:
Calls to update can also use `F expressions` to update one field based on the value of another field in the model.
However, unlike `F()` objects in `filter` and `exclude` clauses, you can’t introduce joins when you use `F()` objects in an `update` – you can only reference fields local to the model being updated. If you attempt to introduce a join with an `F()` object, a `FieldError` will be raised[.]
https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once
Problem
I want to update a bunch of rows in a table to set the id = self.id. How would I do the below? ``` from metadataorder.tasks.models import Task tasks = Task.objects.filter(task_definition__cascades=False) .update(shared_task_id=self.id) ``` The equivalent SQL would be: ``` update tasks_task t join tasks_taskdefinition d on t.task_definition_id = d.id set t.shared_task_id = t.id where d.cascades = 0 ```