ホームページ  >  記事  >  バックエンド開発  >  Django の ORM を使用して .update() メソッドを使用して JsonField 内の複数のキーの値を更新するにはどうすればよいですか?

Django の ORM を使用して .update() メソッドを使用して JsonField 内の複数のキーの値を更新するにはどうすればよいですか?

WBOY
WBOY転載
2024-02-06 09:48:121029ブラウズ

如何使用 Django 的 ORM 使用 .update() 方法更新 JsonField 中多个键的值?

質問の内容

django の .update() メソッドを使用して更新しようとしているモデル フィールドがあります。フィールドは jsonfield です。私はいつもこのエリアに辞書を置いています。例:{"test": "Yes", "prod": "No"}

これはモデルです:

リーリー

このクエリを使用してディクショナリ内のキーを更新できます (ちなみに、これはうまく機能します):

リーリー

ここで質問は、上記のクエリに示されているように、.update() を使用して複数のキー (私の場合は 2 つ) を一度に更新する方法はあるのかということです。

post_save シグナル関数の呼び出しを避けるために、.save() ではなく .update() メソッドを使用してこれを実現したいと考えています。


正解


免責事項: 見た目は悪くなります。

私は過去にこれを行ったことがありますが、Django ではなく純粋な SQL を使用していました。アイデアは、jsonb_set() を再帰的に呼び出すことです。呼び出しごとにキーが設定されます。

したがって、SQL でキーを設定するには {"test":"yes","prod":"no"} これを行うことができます:

リーリー

jsonb_set には 2 つのネストされた呼び出しがあることに注意してください。最も内側の呼び出しは meta_data を使用し、最も外側の呼び出しは最も内側の結果を受け取ります。

したがって、django に相当するものは次のようになります (注、未テスト):

リーリー

または、一度に 1 つの項目を設定して、混乱を返す再帰関数を作成することもできます。

リーリー

サブキーを更新する '__' 関数に注意してください。

以上がDjango の ORM を使用して .update() メソッドを使用して JsonField 内の複数のキーの値を更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。