加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用Django信号的正确案例

发布时间:2020-12-20 12:19:02 所属栏目:Python 来源:网络整理
导读:我有一个全球性问题和一个关于信号背景下特定问题的问题.为了解决这些问题,信号调度员最有用,是否过度? 我有一个使用外键保存多个模型的问题.我认为这个信号可以解决它.但我不知道如何,因为我不明白信号的范围. 模型 class CV(models.Model): title = model
我有一个全球性问题和一个关于信号背景下特定问题的问题.为了解决这些问题,信号调度员最有用,是否过度?

我有一个使用外键保存多个模型的问题.我认为这个信号可以解决它.但我不知道如何,因为我不明白信号的范围.

模型

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已经保存)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读