尝试从ManyToManyField获取数据
我试着从 ManyToManyField
中获取数据,但没成功。能帮我一下吗?这是我的 Song App
模型。
class Artist(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(unique = True,max_length=100,help_text="Suggested value automatically generated from name. Must be unique.")
class Album(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(unique = True,max_length=100,help_text="Suggested value automatically generated from name. Must be unique.")
path = models.CharField(max_length=100,null=True, blank=True)
language = models.ForeignKey(Category)
albumid = models.CharField(max_length=100)
class Song(models.Model):
title = models.CharField(max_length=100)
artist = models.ManyToManyField(Artist)
music = models.ForeignKey(Music)
album = models.ForeignKey(Album)
这是我的视图。我想打印出艺术家和他们的歌曲标题。标题
部分工作得很好,但艺术家
却不行。
def movie_details(request,slug):
movies = get_object_or_404(Movie,slug=slug)
# calculating wikipedia directory structer for images
#image_name = movies.image
name = movies.title
album_name = Album.objects.get(name__exact=name)
album_id = album_name.id
song_list = Song.objects.filter(album=album_id)
#image_path = generateWikiImage(image_name)
#
return render_to_response('base_movies.html',locals(),
context_instance=RequestContext(request)
)
我在模板中这样尝试过:{{song_list.artist}}
,结果得到了这样的信息:<django.db.models.fields.related.ManyRelatedManager object at 0x024CBED0>
。谢谢!
2 个回答
5
ManyToManyField
是用来存储多个对象之间关系的,它实际上保存了一组查询结果,所以你不能直接在模板中输出它。你需要对它进行遍历。
比如这样(song
是某个 Song
实例)
<ul>
{% for artist in song.artist.all %}
<li>{{ artist.name }}</li>
{% endfor %}
</ul>
15
ManyRelatedManager
是一个用来处理多对多关系的对象。如果你想获取你需要的对象列表,就得使用它的 all()
方法。
在这个例子中,你可以使用 {{song_list.artist.all}}
,这样会返回一个可以在你的模板中逐个处理的查询集(QuerySet)。