class Artist(models.Model):
name = models.CharField(max_length=100, unique=True)
slug = models.SlugField(max_length=100, unique=True,
help_text='Uniq value for artist page URL, created from name')
birth_name = models.CharField(max_length=100, blank=True)
class Song(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True,
help_text='Unique value for product page URL, create from name.')
youtube_link = models.URLField(blank=False)
artists = models.ManyToManyField(Artist)
我的观点是假设要显示最新的5首歌曲:
def songs(request, template_name="artists/songs.html"):
song_list = Song.objects.all().order_by('-created_at')[:5]
return render_to_response(template_name, locals(),
context_instance=RequestContext(request))
问题出在模板中......我想显示艺术家姓名 但我真的不知道该怎么做,我试过了:
{% for song in song_list %}
{{ artists__name }} - {{ song.title }}
{% endfor %}
非常感谢任何帮助!
答案 0 :(得分:7)
尝试将模板代码更改为:
{% for song in song_list %}
{% for artist in song.artists.all %}
{{ artist.name }} - {{ song.title }}
{% endfor %}
{% endfor %}
答案 1 :(得分:1)
artists
是另一种类型的管理员,因此您必须遍历artists.all
并打印每个元素的name
属性。
答案 2 :(得分:1)
好吧,我研究了@Dominic Rodger 先生的上述解决方案,但是因为我使用的是 Django 3.2 版,所以它对我不起作用。因此,问题可能保持不变,但根据 Django 版本的变化,解决它们的方式有时会有所不同。如果您使用的是 Django 3.x,请使用以下解决方案。
在views.py中
def songs(request):
song_list = Song.objects.all().order_by('-created_at')[:5]
song_list = {'song_list':song_list}
return render(request, 'artists/songs.html', song_list)
在您的 HTML 模板中使用下面的代码
<div class="table-responsive">
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>Artist - Song Title</th>
</tr>
</thead>
<tbody>
{% for song in song_list %}
</tr>
<td>{{ song.artist.name }} - {{ song.title }}</td>
<tr>
{% endfor %}
</tbody>
</table>
在 urls.py 中
path('songs/', views.songs, name='songs'),
如果您从 localhost 运行源代码,请在浏览器中输入 http://127.0.0.1:8000/songs/
谢谢....