[解決済み] Djangoプロジェクトでsignals.pyを保存する正しい場所とは?
2023-02-04 07:43:52
質問
私が読んでいた Django のドキュメントによると、どうやら
signals.py
を app フォルダに置くのが良いようです。しかし、私が直面している問題は、私が
pre_save
のシグナルを作成し、モデルからクラスをインポートしようとすると、それが
import
と衝突します。
# models.py
from django.contrib.auth.models import User
from django.db import models
from django.utils.translation import gettext as _
from signals import *
class Comm_Queue(CommunicatorAbstract):
queue_statuses = (
('P', _('Pending')),
('S', _('Sent')),
('E', _('Error')),
('R', _('Rejected')),
)
status = models.CharField(max_length=10, db_index=True, default='P')
is_html = models.BooleanField(default=False)
language = models.CharField(max_length=6, choices=settings.LANGUAGES)
sender_email = models.EmailField()
recipient_email = models.EmailField()
subject = models.CharField(max_length=100)
content = models.TextField()
# signals.py
from django.conf import settings
from django.db.models.signals import pre_save
from django.dispatch import receiver
from models import Comm_Queue
@receiver(pre_save, sender=Comm_Queue)
def get_sender_email_from_settings(sender, **kwargs):
obj=kwargs['instance']
if not obj.sender_email:
obj.sender_email='%s' % settings.ADMINS[0][1]
このコードが実行されないのは、インポートする
Comm_Queue
内部
signals.py
の中でシグナルをインポートし、さらに
models.py
.
どうすればこの問題を克服できるか、どなたかアドバイスをお願いします。
ご挨拶
どのように解決するのですか?
Django < 1.7用のオリジナルの回答です。
シグナルを登録するには、インポートする
signals.py
をアプリの
__init__.py
ファイルに記述します。
# __init__.py
import signals
これによって
models.py
から
signals.py
から、循環インポートエラーを起こさずに
この方法の1つの問題は、coverage.pyを使用している場合、カバレッジ結果を台無しにしてしまうことです。
編集:Django >= 1.7 の場合。
AppConfig が導入されて以来、シグナルをインポートする推奨方法は、その
init()
関数を使用することです。参照
Eric Marcosの回答
をご覧ください。
関連
-
django のクエリセット操作
-
[解決済み] Django のビューで 2 つ以上のクエリセットを結合するにはどうすればよいですか?
-
[解決済み] request.GETでURLパラメータを取得する
-
[解決済み] QuerySetで空白またはNULLの名前をフィルタリングする方法は?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] DjangoとReactJSを連携させる方法とは?
-
[解決済み] models.pyでDjangoの設定変数を参照するには?
-
[解決済み] Django が ManyToMany リレーションシップからオブジェクトを取り除く
-
[解決済み] django-tastypie と djangorestframework の違いは何ですか?[クローズド]
-
[解決済み] django テンプレートで "ブロック" を繰り返す方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ユニコードオブジェクトはハッシュ化する前にエンコードする必要がある問題を解決
-
Django の ForeignKey パラメータの使用法
-
[解決済み] Django のモデルで電話番号を保存する最良の方法は何ですか?
-
[解決済み] Django REST フレームワーク: 非モデルシリアライザー
-
[解決済み] シグナルハンドラは django プロジェクトのどこにあるべきですか?
-
[解決済み] Djangoアプリの命名規則はありますか?
-
[解決済み] Django テンプレート url タグに url パラメータを追加する方法は?
-
[解決済み] django のクラスベースのビューで permission_required デコレータを使用する方法
-
[解決済み] Django: Django のアプリを完全にアンインストールするには?
-
[解決済み] Django はフォームが初期化された後にフィールドの値を設定します。