使用Django信号的正确案例
我有一个全球性问题和一个关于信号背景下特定问题的问题.为了解决这些问题,信号调度员最有用,是否过度?
我有一个使用外键保存多个模型的问题.我认为这个信号可以解决它.但我不知道如何,因为我不明白信号的范围. 模型 class CV(models.Model): title = models.CharField(max_length=255) # And other fields... class HigherEducation(models.Model): cv = models.ForeignKey(CV,blank=True,null=True) institution = models.CharField(max_length=255) # And other fields... class ProfessionalExperience(models.Model): cv = models.ForeignKey(CV,null=True) company_name = models.CharField(max_length=255) # And other fields... 所有表单都是从上面的模型继承的模型.最后两个用于modelformsets.所有这些表单都以模板中的一个html格式显示. 形式 class CVForm(forms.ModelForm): class Meta: # All the stuff class EducationForm(forms.ModelForm): class Meta: # All the stuff class ExperienceForm(forms.ModelForm): class Meta: # All the stuff Education = modelformset_factory(HigherEducation,form=EducationForm,max_num=2) Experience = modelformset_factory(ProfessionalExperience,form=ExperienceForm,max_num=1) 在视图中,我需要使用带有当前CV模型的指定ID的cv字段保存EducationForm和ExperienceForm. 我可以通过信号解决这个问题吗? 很难制定问题,所以如果有什么不清楚,我会编辑问题. 解决方法
信号只是钩子,允许你在特定动作发生后触发代码片段,即’当保存模型Foo的实例/行时,运行函数baz()’.信号有两个组成部分:
actual signal(已执行的操作 – 保存/删除等)和
receiving function(发生该操作时该怎么做).
Django内置了许多信号(例如,after或before是一个保存操作,一个在删除操作之后或之前触发的信号),但您也可以创建自己的信号.如果您的网站中有注册过程,您可以编写一个信号,当用户创建帐户时触发该信号,然后将该信号链接到向用户发送电子邮件的功能 我不认为你的情况与使用信号有关.听起来我想要创建一个单独的表单(由3个较小的表单组成),后两个表单(Education& Experience)依赖于先前保存的前一个表单(CV)? 在这种情况下,问题是你不能填写第2和第3表格而没有先填写第1表格(因为还没有CV存在)所以为了达到这个目的,你可能最好用3个步骤创建form wizard;首先保存CV,然后使用CV显示第2步和第3步(在此阶段CV已经保存) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |