首页 > 解决方案 > Django - 如何在模板中呈现父对象?

问题描述

我需要在 {{product.description}} 旁边显示一些产品的供应商,但我无法让它显示在我的桌子上。

模型.py

class Supplier(models.Model):
name = models.CharField(max_length=200, null=True)
phone = models.CharField(max_length=200, null=True, blank=True)
email = models.CharField(max_length=200, null=True, blank=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)

def __str__(self):
    return self.name


class Product(models.Model):
sku = models.IntegerField(null=True)
description = models.CharField(max_length=30)
costprice = models.FloatField(null=True, max_length=99, blank=True)
retailprice = models.FloatField(null=True, max_length=99, blank=True)
barcode = models.CharField(null=True, max_length=99, unique=True)
image = models.ImageField(null=True, blank=True)
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE, null=True)

def __str__(self):
    return self.description

视图.py

def products(request):
products = Product.objects.all()
suppliers = Supplier.objects.all()
context = {'products': products,
           'suppliers': suppliers}
return render(request, 'crmapp/products.html', context)

产品.html

<tr>
{% for product in products %}
  <td>{{product.id}}</td>
  <td><h6><strong>{{product.description}}</strong></h6></td>
  <td >{{products.supplier}}</td>
  <td>£{{product.costprice |floatformat:2}}</td>
  <td>£{{product.retailprice |floatformat:2}}</td>
  <td>{{product.barcode}}</td>
  
</tr>
{% endfor %}

标签: djangodjango-modelsdjango-views

解决方案


拼写错误,我想。

 <td >{{products.supplier}}</td>

一定是:

 <td >{{product.supplier}}</td>

请注意,我已经删除了sin product s


此外,您的views.py 中不需要这个:

suppliers = Supplier.objects.all()

{{product.supplier}}将触发对数据库的查询。为避免这种情况,请使用prefetch_related

products = Product.objects.all().prefetch_related('supplier')

请注意,这是可选的。它只会提高效率,但仅修复拼写错误就可以回答您的问题。


推荐阅读