1. ホーム
  2. ジャンゴ

[解決済み] [Djangoで「一括更新」する方法とは?

2022-04-23 13:09:07

質問

Djangoでテーブルを更新したい - 生のSQLでこのようなものです。

update tbl_name set name = 'foo' where name = 'bar'

最初の結果はこんな感じです。でも、これって意地悪ですよね?

list = ModelClass.objects.filter(name = 'bar')
for obj in list:
    obj.name = 'foo'
    obj.save()

もっとエレガントな方法はないのでしょうか?

どのように解決するのですか?

更新しました。

Django 2.2バージョンで 一括更新 .

古い回答です。

以下の django ドキュメントのセクションを参照してください。

複数のオブジェクトを一度に更新する

要するに使えるようになればいいんです。

ModelClass.objects.filter(name='bar').update(name="foo")

を使用することもできます。 F オブジェクトを使用して、行のインクリメントなどを行うことができます。

from django.db.models import F
Entry.objects.all().update(n_pingbacks=F('n_pingbacks') + 1)

をご覧ください。 ドキュメンテーション .

ただし、その点は注意してください。

  • を使用しません。 ModelClass.save メソッドを使用します(そのため、内部に何らかのロジックがある場合はトリガーされません)。
  • django のシグナルは出力されません。
  • を実行することはできません。 .update() をスライスされたQuerySetに適用する場合、元のQuerySetに適用する必要があります。 .filter().exclude() のメソッドを使用します。