You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django创建多篇博客触发MultipleObjectsReturned错误的解决方法

解决办法

问题根源

get_object_or_404 函数的设计目标是获取单个唯一对象,当查询条件匹配到多个 Post 实例时,就会触发 MultipleObjectsReturned 异常——这正是你遇到的问题。

修正方案

如果你需要展示所有博客文章,直接使用 Post.objects.all() 获取完整的查询集即可,替代原来的 get_object_or_404 调用。

views.py 修改示例

假设你原视图代码类似:

from django.shortcuts import get_object_or_404
from .models import Post

def post_list(request):
    post = get_object_or_404(Post)
    return render(request, 'post_form.html', {'post': post})

修改为:

from .models import Post

def post_list(request):
    posts = Post.objects.all()  # 获取所有Post对象
    return render(request, 'post_form.html', {'posts': posts})

post_form.html 模板调整

因为现在传递的是多对象查询集,模板需要用循环遍历展示:

{% for post in posts %}
    <article class="post-item">
        <h3>{{ post.title }}</h3>
        <div class="post-content">{{ post.content|truncatewords:30 }}</div>
        <p class="post-meta">发布于 {{ post.created_at }}</p>
    </article>
{% empty %}
    <p>目前还没有发布任何博客文章。</p>
{% endfor %}

额外提示

  • 如果需要筛选特定条件的文章,用 Post.objects.filter(筛选条件),比如按作者筛选:Post.objects.filter(author=request.user)
  • 只有在明确要获取单个唯一对象(比如通过主键、唯一slug等)时,才应该使用 get_object_or_404,例如:get_object_or_404(Post, pk=post_id)

内容的提问来源于stack exchange,提问作者Kiran Sarda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:30:52