Django Signal中未解决的错误

我想在保存实例模型的同时用函数填充模型的artist字段。Albumpre_saveMusician


models.py


class 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_name




class 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() 错误!请帮助我。


DIEA
浏览 140回答 1
1回答

慕工程0101907

pre_save在 Musician实例保存到数据库之前调用信号。但是您不能将未保存的实例设置为艺术家值。您应该将信号更改为post_save。在这种情况下,将在创建专辑时保存音乐家的信息:@receiver(post_save,sender = Musician)def create_album(sender,instance,**kwargs):    sm = Album()    sm.artist = instance    sm.save()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python