为了账号安全,请及时绑定邮箱和手机立即绑定

Django Signal中未解决的错误

Django Signal中未解决的错误

DIEA 2021-03-31 18:14:24
我想在保存实例模型的同时用函数填充模型的artist字段。Albumpre_saveMusicianmodels.pyclass Musician(models.Model):    first_name = models.CharField(max_length=50)    last_name = models.CharField(max_length=50)    instrument = models.CharField(max_length=100)    def __str__(self):        return self.first_nameclass Album(models.Model):    artist = models.ForeignKey(Musician, on_delete=models.CASCADE)    name = models.CharField(max_length=100)    release_date = models.DateField(null=True,blank=True)    num_stars = models.IntegerField(null=True,blank=True)    def __str__(self):        return self.artist@receiver(pre_save,sender = Musician)def create_album(sender,instance,**kwargs):    sm = Album()    sm.artist = instance    sm.save()但是,当我尝试从管理员创建音乐人模型的实例时,按保存按钮时会显示此错误。Exception Type: ValueError at /admin/sig/musician/add/Exception Value: save() prohibited to prevent data loss due to unsaved related object 'artist'.我不明白如何解决此 sm.save() 错误!请帮助我。
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

pre_save在 Musician实例保存到数据库之前调用信号。但是您不能将未保存的实例设置为艺术家值。您应该将信号更改为post_save。在这种情况下,将在创建专辑时保存音乐家的信息:


@receiver(post_save,sender = Musician)

def create_album(sender,instance,**kwargs):

    sm = Album()

    sm.artist = instance

    sm.save()


查看完整回答
反对 回复 2021-04-20
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号