Django multipleObject在/author/Ed Sheeran get()返回了多首歌曲,返回了2首

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

我用Django编写了一个歌曲浏览网站,然后突然遇到了这个错误

在/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,如果没有歌曲,则引发异常并抓住它。你能告诉我在哪里进行更改吗,这将非常有用。非常感谢兄弟