添加保存功能后,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()
字段info1
、info2
、info3
没有default
值,它们也不是null=True
。因此,除非您填写它们,否则这些空白字段的调查无法保存到 DB。
我不确定这是否是您的问题,但如果您需要修复它(我相信您会这样做),您应该在这 3 个字段中添加 null=True
。
【讨论】:
以上是关于添加保存功能后,django 信号将不起作用的主要内容,如果未能解决你的问题,请参考以下文章
django views.py 中的保存方法在模型中覆盖后不起作用,py
django post_delete() 信号处理程序不起作用
django-allauth 信号 user_signed_in 信号不起作用