Django批量更新触发save()

时间:2015-02-04 15:05:42

标签: python django django-orm

我需要重新保存所有模型

  

Users.objects.all()。更新(活性= TRUE)

在模型中:

 def save(self, *args, **kwargs):
        self.url = "XYZ"

        super(User, self).save(*args, **kwargs)

但是,上述内容不会触发这些模型上的save()方法。所以没有设置url = XYZ。这可能吗?

更新

看起来我不能使用.update()我尝试过这个:

>>> objects = Users.objects.all()
>>> for item in objects:
...     item.save()

1 个答案:

答案 0 :(得分:3)

不,这是impossible

  

意识到update()在SQL级别进行更新,因此不会在模型上调用任何save()方法,也不会发出pre_save或post_save信号(这是调用Model.save的结果) ())。如果要为具有自定义save()方法的模型更新一组记录,请循环遍历它们并调用save()

$ ./manage.py shell
Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.contrib.auth.models import User
>>> for u in User.objects.all():
...     u.is_active = True
...     u.save()
... 
>>>