关于Django:显示多对多字段

2 投票
1 回答
1442 浏览
提问于 2025-04-16 05:12

我在使用Django的时候遇到一个问题,主要是关于在模板中显示ManyToManyField的内容。我能部分实现,但总是达不到我想要的效果。

首先,我有一个发票模板,它会从我的数据库中显示发票的详细信息。

#invoice_details.html
{% extends "base.html" %}

{% block content %}
<h2>Invoice Details</h2>
<div id="horizontalnav">
  <a href="/index/add_invoice">Add an Invoice</a>
  <a href="/index/work_orders">Add a Work Order</a>
  <a href="/index/add_payment">Add Payment</a>
</div>
<ul>
  <div id="list">
     {% for invoice in invoices_list %}
       {{invoice.client}}<br/>
       {{invoice.invoice_no}}<br/>
       {{invoice.contract_info}}<br/>
       {{invoice.date}}<br/>
       {{invoice.work_orders}}<br/>
     {% endfor %}
    </div>
</ul>
{% endblock %}

在我的数据库中,{{invoice.work_orders}}的显示效果如下。这是因为{{invoice.work_orders}}使用了一个多对多字段(manytomanyfield)。

<django.db.models.fields.related.ManyRelatedManager object at 0x8a811ec>

然后我尝试把{{invoice.work_orders}}改成{{invoice.work_orders.all}},结果是这样的。

[<Work_Order: Assurance Support Service >]

这个方法有点效果,但我只想显示“Assurance Support Service”。所以我在想,是否有办法做到这一点。

1 个回答

5

{{invoice.work_orders.all} 的内容是一个 Work_Order 对象的列表。
如果你想要打印这些对象,你需要遍历这个列表:

{% for invoice in invoice.work_orders.all %}
  {{invoice}}<br />
{% endfor %}

撰写回答