通过另一个属性django更改模型属性

通过另一个属性django更改模型属性,django,python-3.x,Django,Python 3.x,我有型号Word class Word(models.Model): group_id = models.IntegerField() old_group_id = models.IntegerField(default=0) 我有一些疑问: words = Word.objects.filter(...) 现在我希望每个单词都将old\u group\u id设置为group\u id 类似于words.update(old\u group\u id=group\u id)

我有型号
Word

class Word(models.Model): 
   group_id = models.IntegerField()
   old_group_id = models.IntegerField(default=0)
我有一些疑问:

words = Word.objects.filter(...)
现在我希望每个单词都将
old\u group\u id
设置为
group\u id
类似于
words.update(old\u group\u id=group\u id)
到目前为止,我是通过迭代每个单词来完成的,但这感觉不是很有效:

for word in words:
  word.old_group_id = word.group_id
  word.save()
你可以用


您可以使用
F(..)
表达式执行此操作:

from django.db.models import F

Word.objects.filter(...).update(old_group_id=F('group_id'))
因此,更新是在数据库级别完成的。因此,Django/Python端不涉及迭代。因此,这(几乎)总是优于在Django/Python层更改模型对象:它将查询量从O(n)减少到O(1),而且数据库通常被优化为“批量”更新

from django.db.models import F

Word.objects.filter(...).update(old_group_id=F('group_id'))
UPDATE word
SET old_group_id = group_id
WHERE ...