我正在嘗試通過Material_Requisition.reqItems ManytoManyField 從Material_Requisition_Items中間物體參考一個屬性,并將其顯示在 HTML 上;但是,它改為參考Item父物體。
有沒有辦法通過 Django HTML 中的父級從中間物體參考屬性?
模型.py
【中介機構】
class Material_Requisition_Items(models.Model):
reqID = models.ForeignKey("Material_Requisition", on_delete=models.CASCADE)
itemID = models.ForeignKey('item.Item', on_delete=models.CASCADE)
...
itemQuantity = models.PositiveIntegerField(default=0, null=True)
[父物體]
class Material_Requisition(models.Model):
...
reqItems = models.ManyToManyField(
Item,
through="Material_Requisition_Items",
through_fields=('reqID', 'itemID'),
related_name="mat_req_items"
)
requisition_detail.html
{% for item in object.reqItems.all %}
<td>{{ item.itemID.itemName }}</td>
<td>{{ item.itemQuantity}}</td>
{% endfor %}
視圖.py
class RequisitionDetailView(LoginRequiredMixin, generic.DetailView):
model = Material_Requisition
template_name = "requisition/requisition_detail.html"
context_object_name = "requisition"
uj5u.com熱心網友回復:
是的,您可以改為訪問與material_requisition_items_set經理的關系:
{% for item in object.material_requisition_items_set.all %}
<td>{{ item.itemID.itemName }}</td>
<td>{{ item.itemQuantity }}</td>
{% endfor %}
itemID您可以通過預取并立即選擇與Prefetch物件 相關的[Django-doc]來提高效率:
from django.db.models import Prefetch
class RequisitionDetailView(LoginRequiredMixin, generic.DetailView):
model = Material_Requisition
queryset = Material_Requisition.objects.prefetch_related(
Prefetch('material_requisition_items_set', Material_Requisition_Items.objects.select_related('itemID'))
)
template_name = 'requisition/requisition_detail.html'
context_object_name = 'requisition'
注意:通常是 Django 模型,就像 Python 中的所有類都在PascalCase中命名,而不是snake_case,所以它應該是:
MaterialRequisitionItems而不是.Material_Requisition_Items
注意:通常不會
ID給ForeignKey欄位添加后綴,因為 Django 會自動添加帶有_id后綴的“雙胞胎”欄位。因此應該是item,而不是。itemID
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/444825.html
