@receiver(pre_save,sender=MainModel)defsave_a_historicmodel(sender,**kwargs):#do your save historicmodel logic here
或者
defsave_a_historicmodel(sender,instance,created,**kwargs):print"Post save was triggered! Instance:", instancesignals.post_save.connect(save_a_historicmodel,sender=MainModel)
另一种常用的案例是使用Profile策略通过一对一(one-to-one)关系来扩展定制Django User。通常会使用一个信号调度器(signal dispatcher)来监听用户的post_save事件以便能够更新Profile实例。 -- 可以参考How to Extend Django User Model
from django.contrib.auth.models import User
from django.db.models.signals import post_save
def save_profile(sender, instance, **kwargs):
instance.profile.save()
post_save.connect(save_profile, sender=User)
def receiver(signal, **kwargs)
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
@receiver([post_save, post_delete], sender=User)
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from cmdbox.profiles.models import Profile
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _
class ProfilesConfig(AppConfig):
name = 'cmdbox.profiles'
verbose_name = _('profiles')
def ready(self):
import cmdbox.profiles.signals # noqa
from cmdbox.profiles.models import Profile
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
from django.apps import AppConfig
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.utils.translation import ugettext_lazy as _
from cmdbox.profiles.signals import create_user_profile, save_user_profile
class ProfilesConfig(AppConfig):
name = 'cmdbox.profiles'
verbose_name = _('profiles')
def ready(self):
post_save.connect(create_user_profile, sender=User)
post_save.connect(save_user_profile, sender=User)