在Django中使用SQL方式更新多个对象

时间:2014-10-10 21:48:39

标签: django

我有一个需要管理员批准的Comment模型。我正在为管理员提供一个视图。

但是,我使用昂贵的方式更新审批状态。

comments = # a list that contain Comment objects

for c in comments:
    c.approved = True
    c.approved_on = #now
    c.save()

正如您所看到的,我正在循环遍历列表中的所有对象以及每次访问数据库时。

我正在寻找一种方法让我在SQL中做类似的事情

UPDATE comments SET approved = 1 WHERE id IN(...........)

这将在一个SQL查询中执行相同的操作。

有没有办法在Django中这样做?

这样在经理中使用批准方法吗?

Comment.objects.filter(pk__in=[1,2,3]).approve().save()

1 个答案:

答案 0 :(得分:1)

最简单的方法:

def approve(self):
    return self.get_queryset().update(approved=True)

注意:此解决方案有问题。 post_save信号将不会被调用。

如果您需要此信号,则必须像在示例中那样迭代项目。

pre_save