2017-03-12 105 views
-1

Models.pyDjango的外键

Shell Output

- CODE -

newArtist = Artist(name= "GBA",year_formed=1990) 
    newArtist.save() 
    album1 = Album(name = 'a',artist = newArtist) 
    album2 = Album(name = 'b',artist = newArtist) 
    album3 = Album(name = 'c',artist = newArtist) 
    album1.save() 
    album2.save() 
    album3.save() 
    allAlbums = Album.objects.all() 

嘿,我是很新的Django的这样已经经历了文档的努力,但有错误我为了我的生活无法弄清楚!问题在于处理滤镜属性。

我的模型文件中有两个类:Artist和Album。艺术家也是专辑的外键,因为艺术家可以有许多专辑。目前,我创建了3个专辑实例,全部保存在名为“GBA”的Artist“newArtist”下。

我所面临的问题是
1)当尝试使用艺术家的名字“GBA”空查询集返回

2)然而过滤,当我切换说明符“newArtist.id”它成功填充了查询集。 我很困惑,为什么艺术家的名字不起作用,是一个语法/逻辑/ Django规则错误?

如果有人需要查看更多代码片段/输出,请让我知道。 感谢您的帮助!

+2

请在问题中以文字形式显示您的代码。 –

+0

你的代码看起来很好,所以我想知道你是否在名称字段上有完全匹配。 – HenryM

+0

你可以试试'Album.objects.filter(artist__name__icontains = newArtist.name)'。它会搜索艺术家名称包含(不区分大小写)'newArtist.name'的专辑。 Django ORM的一部分。 – Nifled

回答

1

试试这个:

newArtist = Artist.objects.create(name= "GBA", year_formed=1990) 

album1 = Album.objects.create(name = 'a', artist = newArtist) 
album2 = Album.objects.create(name = 'b', artist = newArtist) 
album3 = Album.objects.create(name = 'c', artist = newArtist) 

allAlbums = Album.objects.all() 
+0

对不起,直到现在还没有看到你的答案! –