尝试从ManyToManyField获取数据

6 投票
2 回答
4869 浏览
提问于 2025-04-17 07:18

我试着从 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)。

撰写回答