django外键保存

时间:2010-10-17 12:29:18

标签: django models

我有像这样的模型。

class Mp3(models.Model):
    title=models.CharField(max_length=30)
    artist=models.ForeignKey('Artist')

以下是Artist模型的样子:

class Artist(models.Model):
    name=models.CharField(max_length=100,default="Unknown")

我创建了一个ID为1的艺术家。我如何创建一个分配给这位艺术家的mp3?(我想要这样的查询,例如。

mp3=Mp3.objects.get(id=50)
mp3.artist

)我试过这样的事情

newMp3=Mp3(title="sth",artist=1)

但我得到了

ValueError: Cannot assign "1": "Mp3.artist" must be a "Artist" instance.

我理解错误但仍然不知道如何解决这个问题。谢谢你的帮助 最诚挚的问候

5 个答案:

答案 0 :(得分:23)

我认为将数据库中的艺术家添加到Mp3模型中是不必要的,如果您已经拥有艺术家ID ,您应该这样做:

new_mp3 = Mp3(title='Cool song', artist_id=the_artist_id)
new_mp3.save()

请注意,artist参数中的 _id ,Django将外键ID存储在由field_name和 _id 组成的字段中,因此您可以将外键ID直接传递给无需再次访问数据库即可获取艺术家对象。

如果您的代码中不需要艺术家对象,则应使用此方法。

答案 1 :(得分:12)

artist = Artist.objects.get(id=1)  
newMp3 = Mp3(title="sth", artist=artist)

答案 2 :(得分:2)

答案是:

newMp3=Mp3(title="sth", artist=the_artist)

其中'the_artist'是Artist

的实际实例

答案 3 :(得分:1)

答案将是:

artist_id = Artist.objects.objects.filter(id=1).first()
new_mp3 = Mp3(title="sth", artist_id=artist_id)
new_mp3.save()

artist_id = artist_id(左侧的值将从Mp3 fk中获取艺术家ID)

我来不及了...对不起!

答案 4 :(得分:1)

首先,创建或获取艺术家对象。

artist = Artist.objects.create(name =“艺术家名称”)

artist = Artist.objects.get(id=artist.id) 

然后

newMp3 = Mp3(title="sth", artist=artist)
相关问题