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 サイトの他の関連記事を参照してください。