添加保存功能后,django 信号将不起作用

Posted

技术标签:

【中文标题】添加保存功能后,django 信号将不起作用【英文标题】:django signal wont work after adding a save function 【发布时间】:2022-01-22 23:22:15 【问题描述】:

我有一个这样的简单模型:

class ScientificInfo(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    info1 = models.CharField(max_length=64, choices=SURVEY_CHOICES, blank=True)
    info2 = models.CharField(max_length=64, choices=SURVEY_CHOICES, blank=True)
    info3 = models.CharField(max_length=64, choices=SURVEY_CHOICES, blank=True)
    is_interviewed = models.BooleanField(default=False)

    def save(self, *args, **kwargs):
        if self.info1:
            self.is_interviewed = 'True'
            super(ScientificInfo, self).save(*args, **kwargs)

每次将用户添加到应用程序时,都会使用此信号为其创建一个 ScientificInfo 对象:

@receiver(post_save, sender=User, dispatch_uid='save_new_user_survey')
def survey_create(sender, instance, created, **kwargs):
    user = instance
    if created:
        survey = ScientificInfo(user=user)
        survey.save()

在我在模型中添加该保存方法之前,一切正常。该方法有效,但信号被禁用。你们能帮帮我吗?谢谢

【问题讨论】:

只有在info1 不为空时才保存ScientificInfo 实例 super(ScientificInfo, self).save(*args, **kwargs)向左移动一个标签。 【参考方案1】:

我很确定以下方法根本不起作用:

        survey = ScientificInfo(user=user)
        survey.save()

字段info1info2info3 没有default 值,它们也不是null=True。因此,除非您填写它们,否则这些空白字段的调查无法保存到 DB。

我不确定这是否是您的问题,但如果您需要修复它(我相信您会这样做),您应该在这 3 个字段中添加 null=True

【讨论】:

以上是关于添加保存功能后,django 信号将不起作用的主要内容,如果未能解决你的问题,请参考以下文章

django views.py 中的保存方法在模型中覆盖后不起作用,py

自定义 Django 信号不起作用

django post_delete() 信号处理程序不起作用

django-allauth 信号 user_signed_in 信号不起作用

Django - 如果我在视图中将 2 个表单集放在一起,则添加多次相同视图的功能不起作用

在状态下设置从 API 获取的数据将不起作用