首先使用Django的1.8.3。你應該先註冊信號的所有IM的。據我所知,有一些方法可以做到這一點,但這就是我要做的。 在您的應用程序中創建signals.py
在那裏寫信號;
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=your_model,dispatch_uid="yourmodel_save_receiver")
def post_save_yourmodel(sender, instance, **kwargs):
if instance.profile_status:
print "active"
else:
print "not active"
然後您應該創建apps.py
。該文件包含您的模型的配置信息。
from django.apps import AppConfig
class yourmodel_config(AppConfig):
name = 'yourmodel_config'
verbose_name = 'your_model config'
def ready(self):
import yourmodel.signals
有了這個,只要你的應用程序已經準備好,你的信號將被導入 最後打開__init__.py
並添加以下。
default_app_config = 'yourmodel.apps.yourmodel_config'
有了這個,你要定義你的model.This例如應用程序配置當過yourmodel
保存,信號檢查取決於你的控制檯值(true或false)profile_status
屬性,並打印輸出。您還可以將created
參數添加到您的模型,以瞭解是否創建了該模型的實例。如果創建了新記錄,則created
將返回True。 def post_save_yourmodel(sender, instance, created, **kwargs):
。否則,只要您的型號以yourmodel.save()
保存,就會觸發此信號。 考慮這是一個post_save
示例。您可以從here中找到型號信號的列表。
如果我理解正確,你描述瞭如何使新信號正確?不過,我正在使用預定義的一個。如果我沒有做錯什麼,那麼我使用的框架中有一個錯誤(django-registration,或者我爲他們使用的模板)。所以,問題更像是「你看到拼寫錯誤還是你認爲這是一個錯誤?」 – erikbwork
是的,這是你如何實現新的信號。我不認爲你的問題是一個錯誤。你必須像這樣post_save.connect(registered_callback,sender = mymodel)以某種方式簽名你的接收器。也許這就是爲什麼你的接收器沒有捕獲任何信號,但我沒有你的方法的經驗,所以我不太清楚你的問題是什麼。 – Brkyrn
那麼,你會如何解釋[註冊文件](http://django-registration.readthedocs.io/en/2.0.1/signals.html)?我會說他們對已經實施的信號很有信心。只要我不註冊第二個,其中一個甚至可以工作。我不認爲添加接收應該刪除或副作用不觸發另一個。 – erikbwork