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

WBOY
リリース: 2024-02-06 09:48:12
転載
977 人が閲覧しました

如何使用 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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!