Djangoのモデルアップデートの様々な使い方の紹介
テーブル(モデル)の追加、削除、チェックはDjangoの開発でよく使う機能の一つですが、この記事ではモデルアップデートを使っていて遭遇したこと
モデルアップデートの一般的な使用方法
テーブルの構造が次のような場合
次に、ユーザー名とステータスを変更するには、次のいずれかを使用します。
方法1
User.objects.filter(id=1).update(username='nick',is_active=True)です。
方法2
方法1は、mysqlのステートメントと同様に、データのバッチを更新するのに適しています。 update user set username='nick' where id = 1
方法2は、1つのデータを更新するのに適しており、更新するデータが1つしかない場合に推奨されます。
auto_now属性フィールドを用いた更新
通常、テーブルには次の3つのデフォルトフィールドを追加します。
セルフインクリメント ID、これは django が既にデフォルトで追加しているもので、上のテーブル構築文のように、 username と is_active フィールドだけが書き込まれますが、テーブルが構築されると、デフォルトのセルフインクリメント ID フィールドも持つことになります
レコードがいつ作成されたかを特定する作成時刻は、auto_now_add属性を持ち、レコード作成時に自動的に現在の時刻が入力されます。
modification_timeは、このレコードが最後に変更された日時を特定するもので、auto_now属性を持ち、レコードが変更されると現在の時刻が入力されます。
以下のようなテーブル構造
テーブルにauto_now属性のフィールドがあり、自動的に更新させたい場合、上記の方法2による更新を使用しなければなりません、さもなければauto_nowフィールドは更新されません、すなわち
json/dict 型データ更新フィールド
現在、Webオープン方法の主流は、フロントとバックエンドの分離を懸念している後、共通のjson型とデータ形式のほとんどのバックエンドの相互作用は、どのように便利なコードの最小限の量でデータベースにjson形式のデータを更新するために?同じことは、次の2つのメソッドを使用して行うことができます。
方法1.
繰り返しになりますが、このメソッドは auto_now 属性を持つフィールドの値を自動的に更新するわけではありません。
通常、変数がタプル/リストであることを示すためにアスタリスク(*)を前置し、パラメータが辞書であることを示すためにアスタリスク2個を前置します。
方法2
方法 2 は、方法 1 と同様に auto_now フィールドの値を自動更新しません。
ここではdictメソッドが使用されていることに注意してください
方法3
ForeignKeyフィールドの更新
テーブルにForeignkeyの外部キーがある場合、それをどのように更新しますか?
方法1.
User.objects.filter(id=1).update(role=2)です。
これを行う最も簡単な方法は、role フィールドに id を設定することです。
もちろん、dictをパラメータとして更新することも可能です。
User.objects.filter(id=1).update(**{'username':'nick','role':3})
方法2
また、ロールにインスタンスを割り当てることもできます
もちろん、dictをパラメータとして更新することも可能です。
方法3
注:ここでのロールはオブジェクトに割り当てられている必要があります。idを書かない場合は、 "User.role" must be a "Role" instance というエラーが発生します。
また、dictをパラメータとして更新する場合、以下のコードで若干の違いがあります。
Foreignkey 外部キーは _id と一緒に追加する必要があります。
role_id の後には、ロールインスタンスではなく、id(int型またはstr型)を指定する必要があります。
ManyToManyFieldフィールドの更新
テーブル内にManyToManyFieldフィールドがある場合、それを更新するとどのような影響があるのでしょうか?
m2m update: m2mフィールドには直接の更新方法はなく、クリアと追加によってのみ更新可能です
add(): m2m フィールドに値を追加します。複数の値がある場合はリストを使用します(上記の例を参照してください)。
_t.groups.add(2)
_t.groups.add(Group.objects.get(id=2))を実行。
remove(): m2m フィールドから値を削除します。複数の値がある場合は、リストとして使用することができます(上記の例を参照してください)。
_t.groups.remove(2)
_t.groups.remove(Group.objects.get(id=2))を実行。
clear() : m2m フィールドの値をクリアします。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例