我想在保存實例模型的同時用函數填充模型的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
提交
取消