我想更新表中的一堆行来设置id = self.id. 我将如何进行以下操作?
from metadataorder.tasks.models import Task tasks = Task.objects.filter(task_definition__cascades=False) .update(shared_task_id=self.id)
等效的SQL将是:
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
Peter DeGlop.. 20
您可以使用F表达式执行此操作:
from django.db.models import F tasks = Task.objects.filter(task_definition__cascades=False) .update(shared_task_id=F('id'))
F
对于update
调用中的对象可以做什么有一些限制,但它适用于这种情况:
调用更新还可以
F expressions
用于根据模型中另一个字段的值更新一个字段.但是,与
F()
onfilter
和exclude
子句中的对象不同,在使用F()
对象时不能引入连接update
- 您只能引用要更新的模型的本地字段.如果你试图引入一个F()
对象的连接,FieldError
将会引发一个[.]
https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once
您可以使用F表达式执行此操作:
from django.db.models import F tasks = Task.objects.filter(task_definition__cascades=False) .update(shared_task_id=F('id'))
F
对于update
调用中的对象可以做什么有一些限制,但它适用于这种情况:
调用更新还可以
F expressions
用于根据模型中另一个字段的值更新一个字段.但是,与
F()
onfilter
和exclude
子句中的对象不同,在使用F()
对象时不能引入连接update
- 您只能引用要更新的模型的本地字段.如果你试图引入一个F()
对象的连接,FieldError
将会引发一个[.]
https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once