ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
背景
Django でモデルを作って save() したあと、「いまこのインスタンスにはどんな値が入っているのか」を確認したい場面は頻繁にあります。フォームから受け取った値・自動付与された ID・signal で書き換わった値などを、デバッグ時に素早く見るための定番手段を整理します。
1. 最短: __dict__ で覗く
Python のオブジェクトは内部の属性辞書を __dict__ で取り出せます。Django のモデルインスタンスもこれが効きます。
from myapp.models import SampleModel
obj = SampleModel.objects.get(id=1)
print(obj.__dict__)
出力イメージ:
{
'_state': <django.db.models.base.ModelState object at 0x...>,
'id': 1,
'name': 'sample',
'price': 1200,
'category_id': 3,
'created_at': datetime.datetime(2026, 6, 11, 10, 0, 0, ...),
}
このダンプには次のような特徴があります。
- 先頭の
_stateは Django 内部用(DB 接続情報・new/old 判定)。無視して OK - 外部キーは 属性名 +
_id(例:category_id)で生 ID が入る - ManyToMany は
__dict__に出てこない(中間テーブル経由のため) - DB から取得した直後は
_state.adding == False、新規SampleModel(id=1)しただけだとTrue
見栄え重視で確認したいときは pprint が便利です。
from pprint import pprint
pprint(obj.__dict__)
2. Django shell で対話確認
対話的に試すなら manage.py shell がもっとも手軽です。プロジェクトの設定を読み込んだ状態で Python REPL に入れます。
python manage.py shell>>> from myapp.models import SampleModel
>>> obj = SampleModel.objects.get(pk=1)
>>> obj.__dict__
>>> dir(obj) # 利用可能な属性・メソッド一覧
>>> obj._meta.get_fields() # モデル定義上のフィールド一覧
外部パッケージ django-extensions を入れていれば python manage.py shell_plus でモデルが自動 import されるため、import 文を書かずに即座に試せます。
3. モデル定義そのものを確認: _meta
__dict__ はインスタンスの値ですが、_meta は「モデル定義」を持つ内部 API です。フィールド名・型・関連の方向などを動的に取り出せます。
for f in SampleModel._meta.get_fields():
print(f.name, type(f).__name__)
出力例:
id AutoField
name CharField
price IntegerField
category ForeignKey
created_at DateTimeField
4. 関連オブジェクト(FK / M2M)を実体で見る
__dict__ に出るのは ID だけなので、関連先の実データを見たいときは属性経由で取得します。
obj = SampleModel.objects.select_related('category').get(pk=1)
print(obj.category) # 関連先のインスタンス
print(obj.category.__dict__) # その中身
# ManyToMany
for tag in obj.tags.all():
print(tag.name)
select_related / prefetch_related を付けずに obj.category を参照すると、追加 SQL が発行されます(N+1 問題)。
5. SQL ログを確認する
「内部でどんな SQL が発行されたか」を見たいときは django.db.connection.queries を使います(DEBUG=True のとき有効)。
from django.db import connection, reset_queries
reset_queries()
obj = SampleModel.objects.get(pk=1)
print(obj.category.name)
for q in connection.queries:
print(q['time'], q['sql'])
本格的にチューニングするなら django-debug-toolbar をインストールして、画面右側のパネルから 1 リクエスト分の SQL とテンプレ描画時間を可視化するのが定番です。
6. 「保存前」と「保存後」の差分を見る
フォームから受け取った値が DB に書き込まれる前にどう変わったか、を確認したい場合は pre_save / post_save シグナルや、モデルの _state.adding を見るのが定石です。
obj = SampleModel(name='draft')
print(obj._state.adding) # True(DB に未保存)
obj.save()
print(obj._state.adding) # False
print(obj.__dict__) # id が割り当てられている
7. シリアライズして JSON で見る
API レスポンスと同じ形式で見たい場合は、DRF の ModelSerializer や Django 標準の django.core.serializers を使います。
from django.core.serializers import serialize
print(serialize('json', [obj], indent=2))
よくあるハマり所
__dict__に M2M は出ない →obj.tags.all()で個別取得__dict__にproperty経由の派生値は出ない →vars(obj)でも同じ。属性アクセスする- DB から取り直さずに変更後の状態を見ると古い値が残る →
obj.refresh_from_db()で再ロード - signal で書き換わる項目は
save()後の__dict__で確認する
関連
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- NetBeansでTomcatを起動する手順|サーバ登録・ポート・トラブル対処 2026-09-07 07:45:13
- Laravel 記事一覧55件|環境構築・ルーティング・DB・エラー対処 2026-09-07 07:45:13
- Spring Framework 記事一覧31件|DI・設定・例外の対処 2026-09-07 07:45:13
- Javaの定数 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- hostnameコマンドの使い方|Windows・Linux・macOSでホスト名確認 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Oracle DROP USERでユーザー削除|CASCADE・接続中ユーザーの対処 2026-09-07 07:45:13
- SQLとは|DDL・DMLとリレーショナルデータベース操作の基本 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?