一对多 多对一

发布于:2025-05-28 ⋅ 阅读:(16) ⋅ 点赞:(0)

关键解释

  1. 反向关系名称:(主要用于一对多中的一表并且没有定义相关外检字段)

    • 你的 Book 模型中未指定 related_name(相关名称),所以默认反向查询名称为 book_set(格式:关联模型小写_set)。
       

        <td>  {# 遍历该出版社下的所有书籍 #}
                          {# 反向查询该出版社的所有书籍 #}
                          {% for book in press.book_set.all %}
                              {{ book.bookname }}(价格:{{ book.bookprice }})
                              {% if not forloop.last %}<br>{% endif %}
                          {% empty %}
                              <span style="color: gray;">该出版社暂无书籍</span>
                          {% endfor %}
                      <td>

    • 如果希望自定义名称(如 books),可以在外键中添加 related_name='books',模板中则用 press.books.all

    • 这里是多对一中的多表(book表已经定义相关联的字段了)

        {#                forloop.counter  循环多少次 编号会随之变化  #}
                      <td>{{ book.bookname }}</td>
                      <td>{{ book.bookprice }}</td>
                      <td>{{ book.bookauthor }}</td>
                      <td>{{ book.press.pressname }}</td>
                      <td>
                          {% if book.bookimg %}
                              <img src="{{ book.bookimg }}" alt="暂无图片" style="height: 100px">
                          {% else %}
                              <span class="text-muted">暂无图片</span>
                          {% endif %}
                      </td>


       

  2. 模板语法

    • press.book_set.all:获取该出版社关联的所有书籍。

    • {% empty %}:如果没有书籍时显示占位内容。

    • forloop.last:判断是否为最后一次循环,避免最后一个书籍后显示多余的 <br>

  3. 字段显示

    • 根据你的 Book 模型字段,可以显示 booknamebookpricebookauthor 或 bookimg

传参问题:
book项目中bookyemian的详情点击后

<!-- 修改原来的详情按钮 -->
                            <a href="{% url 'bookshopping' book.id %}" class="btn btn-detail">
                                <i class="fa fa-info-circle"></i> 详情
                            </a>

url.py

 path("bookshopping/<int:book_id>", views.bookshopping, name="bookshopping")

view.py返回数据对象

def bookshopping(request,book_id):
    book = Book.objects.get(id=book_id)
    return render(request, "book/bookshopping.html", {"book": book})


 


网站公告

今日签到

点亮在社区的每一天
去签到