Django multipleObject在/author/Ed Sheeran get()返回了多首歌曲,返回了2首
我用Django编写了一个歌曲浏览网站,然后突然遇到了这个错误Django multipleObject在/author/Ed Sheeran get()返回了多首歌曲,返回了2首,django,Django,我用Django编写了一个歌曲浏览网站,然后突然遇到了这个错误 在/author/Ed Sheeran get()返回的多个对象返回了多首歌曲——它返回了2首 我试图建立我的网站,这样当用户点击任何歌曲作者的名字时,他们将被重定向到另一个页面,那里只有该作者的歌曲。但不幸的是,我的代码遇到了这个错误 My models.py: class Songs(models.Model): title = models.CharField(max_length = 100) lyrics
在/author/Ed Sheeran get()返回的多个对象返回了多首歌曲——它返回了2首代码>
我试图建立我的网站,这样当用户点击任何歌曲作者的名字时,他们将被重定向到另一个页面,那里只有该作者的歌曲。但不幸的是,我的代码遇到了这个错误
My models.py:
class Songs(models.Model):
title = models.CharField(max_length = 100)
lyrics = models.TextField()
author = models.CharField(max_length = 100)
track_image = models.CharField(max_length=2083)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('/', kwargs={'pk': self.pk})
My views.py:
def home(request):
context = {
'songs': Songs.objects.all()
}
return render(request, 'home.html', context)
class AuthorSongListView(ListView):
model = Songs
template_name = 'author_songs.html'
context_object_name = 'songs'
paginate_by = 2
def get_queryset(self):
author = get_object_or_404(Songs, author=self.kwargs.get('author'))
return Songs.objects.filter(author=author)
我的html:
{% block content %}
<h1 class="mb-3">Songs by {{ view.kwargs.author }}</h1>
{% for song in songs %}
<article class="media content-section">
<div class="media-body">
<div class="article-metadata">
<a class="mr-2" href="{% url 'author-songs' song.author %}">{{ song.author }}</a>
</div>
<h2><a class="article-title" href="{% url 'song-detail' song.id %}">{{ song.title }}</a></h2>
<p class="article-content">{{ song.lyrics }}</p>
</div>
</article>
{% endfor %}
{% endblock content %}
{%block content%}
{{view.kwargs.author}的歌曲
{%用于歌曲中的歌曲%}
{{song.lymps}
{%endfor%}
{%endblock内容%}
出现错误是因为Model.objects.get(**args)
应始终返回1个结果。如果发现多个结果,则抛出此错误
在此代码中:
class AuthorSongListView(ListView):
模型=歌曲
模板名称='author\u songs.html'
上下文\对象\名称='歌曲'
分页单位=2
def get_queryset(自我):
author=get\u object\u或_404(歌曲,author=self.kwargs.get('author'))
返回Songs.objects.filter(author=author)
这是抛出错误的行
author=get\u object\u或_404(歌曲,author=self.kwargs.get('author'))
#这是试图为给定的作者获取这样的歌曲
Songs.objects.get(author=self.kwargs.get('author'))
#由于作者有多首歌曲,这是一个抛出错误。
您需要做的是更新方法get\u queryset
,如下所示:
def get_queryset(self):
返回Songs.objects.filter(author=self.kwargs.get('author'))
Ed Sheeran的表中有2首歌曲,你必须使用过滤器,而不是get_object_或_404,如果没有歌曲,则引发异常并抓住它。你能告诉我在哪里进行更改吗,这将非常有用。非常感谢兄弟