通过另一个属性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 ...