マガジンのカバー画像

Django関連

69
運営しているクリエイター

2022年7月の記事一覧

Django_models.ForeignObjectとは #230日目

Django_models.ForeignObjectとは #230日目

ForeignObjectはForeignKeyの親クラスにもなっているもので、モデル同士で多対一の関係を作ります。特徴として、複数列でテーブル同士を関連づけることが可能です。

先にForeignObjectをフィールドに使ったモデルの記述方法を例示します。「TaskResult」というモデルに、task_idカラムでリレーションしています。

from django_celery_result

もっとみる
Django_モデルのForeignKeyとManyToManyを図で理解する #227日目

Django_モデルのForeignKeyとManyToManyを図で理解する #227日目

DjangoではForeignKey (多対一) やManyToMany (多対多) といったフィールドを使って、モデル同士を紐づかせることが可能です。

ただ、私自身いくつか記事を書いてきましたが、ForeignKeyもManyToManyも少しイメージが持ちにくく、いざ使おうとすると「ん?」と混乱しやすいです。

そこでこれらのフィールドのイメージを図で整理して、理解を深められるようにしたいと

もっとみる
Django_ForeignKeyのデータを更新 / save()とcreate()の違い #225日目

Django_ForeignKeyのデータを更新 / save()とcreate()の違い #225日目

本日、ここ1-2週間ほどWebツールの機能修正に挑戦していたのですが、(ローカル環境で)遂にそれが修正完了しました…!週明けにプルリクを出すので手戻りがあるかもしれませんが、実務のWebツールで、狙った通りの挙動ができたので何だか嬉しかったです。

ただ実際は、コードの修正自体は30-40分程度のもので、エラーを起こしている箇所の特定の方が大変でした(最終的に自力ではできなかったです)。

このエ

もっとみる
Django_[transaction.atomic]を使って一連の処理をトランザクション化 #219日目

Django_[transaction.atomic]を使って一連の処理をトランザクション化 #219日目

トランザクションとは、連続した複数のデータベース操作を一つにまとめたものです。処理が最後まで完了したらレコードの登録・変更・削除をまとめてデータベースに反映(コミット)し、エラー等で途中で失敗した場合はその途中までの処理は全て無かったことにしてくれます(ロールバック)。

ちなみにDjangoのデフォルトはトランザクションではなく、オートコミットというモードです。これはsave()やdelete(

もっとみる
Django_[bulk_create]メソッドでDBにオブジェクトを一括作成 #216日目

Django_[bulk_create]メソッドでDBにオブジェクトを一括作成 #216日目

Djangoではモデルを通してオブジェクトをデータベースに登録することが可能です。基礎的なコードとしては、以下のようにcreate()を使います。

Model.objects.create()

これでデータベースに問題なく登録されますが、膨大な数を処理しようとすると、これのままでは処理に時間がかかる、という弱点があります。

膨大な数を処理とは、例えば以下のように1回ずつcreate()しなが

もっとみる
Django_[save_model]メソッドで、モデルの保存時の追加処理を設定する #215日目

Django_[save_model]メソッドで、モデルの保存時の追加処理を設定する #215日目

DjangoのAdminサイトではモデルにデータを追加したり削除したりできてとても便利ですが、このデータ保存時に追加の処理を設定することも可能です。

処理内容と、それを保存するコードをそれぞれ記載します。

前後に処理を挟んで、任意のタイミングで保存するには「save_model関数」をオーバーライドすればOKです。save_modelメソッドには、オブジェクトを追加するか変更するかに基づいて、

もっとみる
Django_[prefetch_related]で外部参照データを指定する方法 #214日目

Django_[prefetch_related]で外部参照データを指定する方法 #214日目

以前にご紹介したprefetch_relatedの追加情報です。

DBに何度もアクセスしてデータを取り出すの非効率なため、Djangoでは可能な限り少ないクエリでデータを取得するための「prefetch_related()」が用意されています。

これは指定したモデルに外部参照データがある場合に、1回のクエリで外部参照データ分まで取得してくれる機能を持っています(普通に取得すると指定したモデル&

もっとみる
Django_インポートせずにモデルを指定する方法 #213日目

Django_インポートせずにモデルを指定する方法 #213日目

DjangoでForeignKeyを使ってモデルを指定する際、他ファイルからインポートせずにモデルを指定したい、という場面が出てきます。

これはモデルの数が膨大になってきたとき直面する場面で、愚直にimportするとそれだけでコード量が膨大になり、importの関係も複雑になり、コンフリクトが起きて上手く機能しないことが増えたりします。

そこでDjangoでは、モデルをimportなしで指定す

もっとみる
Django_ModelAdminを使って管理画面を編集 #212日目

Django_ModelAdminを使って管理画面を編集 #212日目

Djangoの管理サイトは、Djangoで作成したWebアプリのデータを管理するための組み込みアプリケーションです。利用するのは主に管理者(administrator)や開発者です。

この管理サイトはとても便利で、ここからモデルに対応したデータベースのレコードを操作すること(CRUD)や、ユーザーのパスワード変更、データ検索、ソート、フィルターなど様々な機能が備わっています。

本日は参考記事の

もっとみる