gpt4 book ai didi

python - Django 信号中 Unresolved 错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:05 25 4
gpt4 key购买 nike

我想在保存实例 Musician 模型时使用 pre_save 函数填充 Album 模型的 artist 字段。

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

最佳答案

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

@receiver(post_save,sender = Musician)
def create_album(sender,instance,**kwargs):
sm = Album()
sm.artist = instance
sm.save()

关于python - Django 信号中 Unresolved 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51116923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com