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

Django模型关联异常:点击图书显示全部页面而非关联页面

问题解决:仅展示选中图书关联的页面

问题根源

你的Second_page视图直接查询了所有Page对象(Page.objects.all()),没有根据传入的book_slug过滤出对应图书的页面,因此打开页面时会显示全部已创建的Page。

修复步骤

1. 优化Model字段名(可选但推荐)

将Page模型里的title_title字段名改为更直观的book,提升代码可读性:

# models.py
class Page(models.Model):
    # 替换原title_title字段为book
    book = models.ForeignKey('Book', on_delete=models.PROTECT)
    number_page = models.CharField(max_length=500)

    def __str__(self):
        return self.number_page

2. 修改视图函数,过滤对应图书的页面

在Second_page中,先获取目标图书对象,再查询该图书关联的所有页面:

# views.py
def Second_page(request, book_slug):
    # 获取指定slug的图书,不存在则返回404
    book = get_object_or_404(Book, slug=book_slug)
    # 过滤出属于当前图书的页面
    # 若未修改字段名,此处改为filter(title_title=book)
    page = Page.objects.filter(book=book)
    return TemplateResponse(request, "second.html", {'page': page})

3. 优化模板链接(可选)

在first.html中使用get_absolute_url生成链接,避免硬编码slug:

<!-- first.html -->
{% extends 'index.html' %}
{% block content %}
{% for b in book %}
<ul>
  <li><a href="{{ b.get_absolute_url }}">{{ b.title }}</a></li>
</ul>
{% endfor %}
{% endblock %}

同时需统一get_absolute_url与urls.py的命名:

# models.py的Book类中修改get_absolute_url
def get_absolute_url(self):
    return reverse('Second_page', kwargs={'book_slug': self.slug})

修改完成后,打开对应图书的页面时,将仅展示该图书关联的所有Page。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:57:42