Пытался получить данные от ManyToManyField - PullRequest
1 голос
/ 29 ноября 2011

Я пытался получить данные от 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)

Вот мой взгляд.Я хочу напечатать Artist с названиями.Titles работают нормально.но не Artist

 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 ]

8 голосов
/ 29 ноября 2011

ManyRelatedManager - это объект, который обрабатывает отношение ManyToMany там.Чтобы получить список объектов, которые вы ищете, вам нужно использовать метод all().

В этом случае вы будете использовать {{song_list.artist.all}}, что даст вам QuerySet, который вы затем сможете выполнить в своем шаблоне.

2 голосов
/ 29 ноября 2011

ManyToManyField содержит набор запросов, поэтому вы не можете просто вывести его в шаблон. Вы должны перебрать его.

Вот так (song это какой-то Song экземпляр)

<ul>
{% for artist in song.artist.all %}
    <li>{{ artist.name }}</li>
{% endfor %}
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...