我想在保存实例模型的同时用函数填充模型的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()
添加回答
举报
0/150
提交
取消