シグナルLink to this heading
Djangoが送信する全てのシグナルのリストです。全ての組み込みシグナルは send() メソッドを使用して送信されます。
モデルのシグナルLink to this heading
django.db.models.signals モジュールは、モデルシステムによって送信される一連のシグナルを定義しています。
pre_initLink to this heading
- django.db.models.signals.pre_initLink to this definition
Django モデルをインスタンス化するたびに、このシグナルはモデルの __init__() メソッドの開始時に送信されます。
このシグナルとともに送信される引数は以下の通りです:
senderたった今インスタンスが作成されたモデルクラス。
args__init__()に渡される位置引数のリストです。kwargs__init__()に渡されるキーワード引数の辞書。
例えば、 チュートリアル にはこのような行があります:
q = Question(question_text="What's new?", pub_date=timezone.now())
pre_init ハンドラーに送信される引数は次の通りです:
引数 |
値 |
|---|---|
|
|
|
|
|
|
post_initLink to this heading
- django.db.models.signals.post_initLink to this definition
pre_init と似ていますが、このイベントは __init__() メソッドが終了した時に送信されます。
このシグナルとともに送信される引数は以下の通りです:
sender上記の通り: たった今インスタンスが作成されたモデルクラス。
instanceたった今作成されたモデルの実際のインスタンス。
pre_saveLink to this heading
- django.db.models.signals.pre_saveLink to this definition
これは、モデルの save() メソッドの始まりに送信されます。
このシグナルとともに送信される引数は以下の通りです:
senderモデルクラス。
instance保存される実際のインスタンス。
raw真偽値です。モデルがそのままの形 (例えば フィクスチャ を読み込む時) で保存されている場合は
Trueとなります。データベースがまだ一貫した状態にない可能性があるため、他のレコードをクエリしたり変更したりするべきではありません。using使用されているデータベースのエイリアス。
update_fieldsModel.save()に渡された更新するフィールドのセット、もしくはupdate_fieldsがsave()に渡されなかった場合はNone。
post_saveLink to this heading
- django.db.models.signals.post_saveLink to this definition
pre_save に似ていますが、 save() メソッドの最後に送信されます。
このシグナルとともに送信される引数は以下の通りです:
senderモデルクラス。
instance保存される実際のインスタンス。
createdブール値。レコードが作成された場合に
Trueを返す。raw真偽値です。モデルがそのままの形 (例えば フィクスチャ を読み込む時) で保存されている場合は
Trueとなります。データベースがまだ一貫した状態にない可能性があるため、他のレコードをクエリしたり変更したりするべきではありません。using使用されているデータベースのエイリアス。
update_fieldsModel.save()に渡された更新するフィールドのセット、もしくはupdate_fieldsがsave()に渡されなかった場合はNone。
pre_deleteLink to this heading
- django.db.models.signals.pre_deleteLink to this definition
モデルの delete() メソッドとクエリセットの delete() メソッドの開始時に送信されます。
このシグナルとともに送信される引数は以下の通りです:
senderモデルクラス。
instance実際に削除されるインスタンス。
using使用されているデータベースのエイリアス。
origin削除の起点となった
ModelまたはQuerySetインスタンス、すなわちdelete()メソッドが呼び出されたインスタンス。
post_deleteLink to this heading
- django.db.models.signals.post_deleteLink to this definition
pre_delete のようですが、モデルの delete() メソッドとクエリセットの delete() メソッドの終わりに送信されます。
このシグナルとともに送信される引数は以下の通りです:
senderモデルクラス。
instance実際に削除されるインスタンス。
このオブジェクトはデータベース内に存在しなくなるため、このインスタンスをどのように扱うか非常に注意してください。
using使用されているデータベースのエイリアス。
origin削除の起点となった
ModelまたはQuerySetインスタンス、すなわちdelete()メソッドが呼び出されたインスタンス。
m2m_changedLink to this heading
- django.db.models.signals.m2m_changedLink to this definition
モデルインスタンス上の ManyToManyField が変更されたときに送信されます。厳密には、これはモデルシグナルではありません。なぜなら、これは ManyToManyField によって送信されるためです。しかし、モデルへの変更を追跡する際に、 pre_save/post_save および pre_delete/post_delete を補完するものであるため、ここに含まれています。
このシグナルとともに送信される引数は以下の通りです:
senderManyToManyFieldを記述する中間モデルクラスです。多対多フィールドが定義されたときに自動的に作成されます。多対多フィールドのthrough属性を使用してアクセスできます。instance多対多のリレーションが更新されたインスタンス。これは
senderのインスタンス、またはManyToManyFieldが関連づけられているクラスのインスタンスのいずれかです。actionリレーションに対して行われた更新の種類を表す文字列です。次のいずれかの値を取ります。
"pre_add"リレーションにオブジェクトが1つ以上追加される 前 に送信されます。
"post_add"リレーションに1つ以上のオブジェクトが追加された 後 に送信されます。
"pre_remove"リレーションから 1 つ以上のオブジェクトが削除される 前 に送信されます。
"post_remove"リレーションから1つ以上のオブジェクトが削除された 後に 送信されます。
"pre_clear"リレーションがクリアされる 前に 送信されます。
"post_clear"リレーションがクリアされた 後 に送信されます。
reverseリレーションのどちらの側が更新されているかを示します (つまり、更新されているのが順方向のリレーションか、逆方向のリレーションかを表します)。
modelリレーションに追加、削除、またはクリアされるオブジェクトのクラス。
pk_setpre_addとpost_addアクションの場合、これはリレーションに追加される、または追加された主キー値のセットです。既存の値をフィルタリングしてデータベースのIntegrityErrorを避ける必要があるため、追加されることが提出された値のサブセットである可能性があります。pre_removeとpost_removeアクションにおいて、これはリレーションから削除されることが提案された主キーの値のセットです。これは、値が実際に削除されるか、または削除されたかどうかに依存しません。特に、存在しない値が提出されることもあり、pk_setに表示されますが、データベースには影響を与えません。pre_clearとpost_clearアクションの場合、これはNoneです。using使用されているデータベースのエイリアス。
たとえば、Pizza が複数の Topping オブジェクトを持てるとしたら、次のようにモデル化されます。
class Topping(models.Model):
# ...
pass
class Pizza(models.Model):
# ...
toppings = models.ManyToManyField(Topping)
このようにハンドラーを接続した場合:
from django.db.models.signals import m2m_changed
def toppings_changed(sender, **kwargs):
# Do something
pass
m2m_changed.connect(toppings_changed, sender=Pizza.toppings.through)
そして、次のようにした場合:
>>> p = Pizza.objects.create(...)
>>> t = Topping.objects.create(...)
>>> p.toppings.add(t)
m2m_changed ハンドラ (上記の例では toppings_changed) に送信された引数は、次の通りです:
引数 |
値 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
そして、次のようなことをした場合:
>>> t.pizza_set.remove(p)
m2m_changed ハンドラに送信される引数は以下の通りです:
引数 |
値 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class_preparedLink to this heading
- django.db.models.signals.class_preparedLink to this definition
モデルクラスが「準備完了」したとき――つまり、モデルが定義され、Djangoのモデルシステムに登録された後に送信されます。Djangoはこのシグナルを内部的に使用しています。通常、サードパーティのアプリケーションで使用されることはありません。
このシグナルはアプリ登録プロセス中に送信されます。そして AppConfig.ready() はアプリ登録が完全に終了した後に実行されますので、レシーバーをそのメソッド内で接続することはできません。一つの可能性としては、 AppConfig.__init__() の中でそれらを接続することですが、モデルをインポートしたり、アプリ登録への呼び出しを触発しないよう注意が必要です。
このシグナルで送信される引数:
senderたった今準備されたモデルクラス。
管理シグナルLink to this heading
django-admin によって送信されるシグナル。
pre_migrateLink to this heading
- django.db.models.signals.pre_migrateLink to this definition
migrate コマンドによって、アプリケーションのインストールを開始する前に送信されます。models モジュールがないアプリケーションには発行されません。
このシグナルとともに送信される引数は以下の通りです:
senderマイグレーションまたは同期される予定のアプリケーションのための
AppConfigインスタンスです。app_configsenderと同じ。verbositymanage.pyが画面上にどれだけ情報を表示しているかを示します。詳細については--verbosityフラグを参照してください。pre_migrateのためにリスナーとなる関数は、この引数の値に基づいて画面出力を調整するべきです。interactiveinteractiveがTrueの場合、コマンドラインでユーザーに入力を求めるのは安全です。interactiveがFalseの場合、このシグナルを待ち受ける関数は何も求めてはいけません。たとえば、
django.contrib.authアプリは、interactiveがTrueのときのみスーパーユーザーの作成を促します。stdout冗長な出力をリダイレクトすべきストリームのようなオブジェクト。
usingコマンドが操作を行うデータベースのエイリアスです。
planマイグレーション実行に使用されるマイグレーションプランです。プランはパブリックAPIではありませんが、プランを知る必要がある稀なケースに対応します。プランは2値タプルのリストで、最初の項目はマイグレーションクラスのインスタンスであり、2番目の項目はマイグレーションがロールバックされた (
True) か適用された (False) かを示します。appsマイグレーションを実行する前のプロジェクトの状態を含む
Appsのインスタンスです。操作を行いたいモデルを取得するために、グローバルなappsレジストリの代わりに使用すべきです。
post_migrateLink to this heading
- django.db.models.signals.post_migrateLink to this definition
migrate コマンドの終わりに (マイグレーションが行われなくても)、そして flush コマンドの後に送信されます。models モジュールがないアプリケーションには発行されません。
このシグナルのハンドラは、データベーススキーマの変更を行ってはなりません。なぜなら、そのような変更を行うと、migrate コマンド実行中に flush コマンドが失敗する可能性があるからです。
このシグナルとともに送信される引数は以下の通りです:
senderインストールされたばかりのアプリケーション用の
AppConfigインスタンスです。app_configsenderと同じ。verbositymanage.pyが画面上にどれだけ情報を表示しているかを示します。詳細については--verbosityフラグを参照してください。post_migrateを待ち受ける関数は、この引数の値に基づいて画面に出力する内容を調整する必要があります。interactiveinteractiveがTrueの場合、コマンドラインでユーザーに入力を求めるのは安全です。interactiveがFalseの場合、このシグナルを待ち受ける関数は何も求めてはいけません。たとえば、
django.contrib.authアプリは、interactiveがTrueのときのみスーパーユーザーの作成を促します。stdout冗長な出力をリダイレクトすべきストリームのようなオブジェクト。
using同期に使用されるデータベースエイリアスです。デフォルトは
defaultデータベースです。planマイグレーション実行に使用されたマイグレーションプラン。プランはパブリックAPIではありませんが、プランを知る必要がある稀な場合に対応します。プランは2値タプルのリストで、最初の項目はマイグレーションクラスのインスタンスであり、2番目の項目はマイグレーションがロールバックされたか(
True)適用されたか(False)を示します。appsマイグレーション実行後のプロジェクトの状態を保持する
Appsのインスタンスです。グローバルなappsレジストリの代わりに、操作を行いたいモデルを取得するために使用するべきです。
たとえば、次のように AppConfig にコールバックを登録できます:
from django.apps import AppConfig
from django.db.models.signals import post_migrate
def my_callback(sender, **kwargs):
# Your specific logic here
pass
class MyAppConfig(AppConfig):
...
def ready(self):
post_migrate.connect(my_callback, sender=self)
リクエスト/レスポンス シグナルLink to this heading
リクエストを処理する際にコアフレームワークによって送信されるシグナル。
request_startedLink to this heading
- django.core.signals.request_startedLink to this definition
Django が HTTP リクエストの処理を開始したときに送信されます。
このシグナルとともに送信される引数は以下の通りです:
senderリクエストを処理したハンドラクラス。例えば
django.core.handlers.wsgi.WsgiHandlerが該当します。environリクエストに提供される
environ辞書。
request_finishedLink to this heading
- django.core.signals.request_finishedLink to this definition
クライアントへの HTTP レスポンスの配信が完了したときに送信されます。
このシグナルとともに送信される引数は以下の通りです:
sender上述のようなハンドラークラスです。
got_request_exceptionLink to this heading
- django.core.signals.got_request_exceptionLink to this definition
このシグナルは、Djangoが受信HTTPリクエストの処理中に例外に遭遇したときにいつでも送信されます。
このシグナルとともに送信される引数は以下の通りです:
sender使用されません (常に
None)。requestHttpRequestオブジェクト。
テストシグナルLink to this heading
テストを 実行しているとき のみ送信されるシグナル。
setting_changedLink to this heading
- django.test.signals.setting_changedLink to this definition
このシグナルは、 django.test.TestCase.settings() コンテキストマネージャや django.test.override_settings() デコレータ/コンテキストマネージャを通じて設定の値が変更されたときに送信されます。
実際には2回送信されます。新しい値が適用されたとき("setup")と、元の値が復元されたとき("teardown")。2つを区別するには、enter 引数を使用してください。
このシグナルは django.core.signals からインポートすることもできます。これにより、テスト以外の状況で django.test からインポートすることを避けられます。
このシグナルとともに送信される引数は以下の通りです:
sender設定ハンドラ。
setting設定の名前。
value設定変更後の設定値です。初めに存在しない設定の場合、 "teardown" フェーズでは
valueはNoneです。enter真偽値。設定が適用されている場合は
True、復元された場合はFalse。
template_renderedLink to this heading
- django.test.signals.template_renderedLink to this definition
テストシステムがテンプレートをレンダリングするときに送信されます。このシグナルは、Djangoサーバーの通常の操作中には発生しません。テスト中にのみ利用可能です。
このシグナルとともに送信される引数は以下の通りです:
データベースラッパーLink to this heading
データベース接続が開始されたときに、データベースラッパーによって送信されるシグナル。
connection_createdLink to this heading
- django.db.backends.signals.connection_createdLink to this definition
Sent when the database wrapper makes the initial connection to the database. This is particularly useful if you'd like to send any post connection commands to the SQL backend.
このシグナルとともに送信される引数は以下の通りです:
senderデータベースラッパークラス ― つまり、
django.db.backends.postgresql.DatabaseWrapperやdjango.db.backends.mysql.DatabaseWrapperなどです。connectionオープンされたデータベース接続です。これは、複数のデータベース設定を使用する際に、異なるデータベースからの接続シグナルを区別するために使用されます。
Tasks signalsLink to this heading
Signals sent by the tasks framework.
task_enqueuedLink to this heading
- django.tasks.signals.task_enqueuedLink to this definition
Sent once a Task has been enqueued.
このシグナルとともに送信される引数は以下の通りです:
senderThe backend class which the Task was enqueued on to.
task_resultThe enqueued
TaskResult.
task_startedLink to this heading
- django.tasks.signals.task_startedLink to this definition
Sent when a Task has started executing.
このシグナルとともに送信される引数は以下の通りです:
senderThe backend class which the Task was enqueued on to.
task_resultThe started
TaskResult.
task_finishedLink to this heading
- django.tasks.signals.task_finishedLink to this definition
Sent once a Task has finished executing, successfully or otherwise.
このシグナルとともに送信される引数は以下の通りです:
senderThe backend class which the Task was enqueued on to.
task_resultThe finished
TaskResult.