【问题标题】:Django select_related: How to display related table data in a templateDjango select_related:如何在模板中显示相关表数据
【发布时间】:2014-02-04 19:44:21
【问题描述】:

使用select_related()时,我无法在模板中显示相关表格的字段

这是我的模型:

class Customer(models.model):
    customer_name = models.CharField(max_length=500)

class Orders(models.model):
    cust_id = models.ForeignKey(Customers)
    invoice_number = models.IntegerField()
    invoice_creation_date = models.DateTimeField('Invoice Created Date')

class Products(models.Model):                                                   
    name = models.CharField(max_length=500)                                     
    description = models.CharField(max_length=500)                              
    price = models.DecimalField(max_digits=20, decimal_places=2)

class Orders_Products(models.Model):                                            
    order_id = models.ForeignKey(Orders)                                        
    product_id = models.ForeignKey(Products)                                    
    quantity = models.IntegerField(default=0)

这是我的看法:

def home(request):                                                              
    list_of_orders = Orders_Products.objects.select_related()
    template = 'erp_app/home.html'
    context = RequestContext(request, {'list_of_orders': list_of_orders})
    return render(request, template, context)

如何在模板中表示来自OrdersProducts,尤其是Customers 的相关字段。例如。我想显示同一条相关记录中的Orders.invoice_numberProducts.nameCustomer.customer_name

例如:

{% for order in list_of_orders %}
<tr>
    <td>{{ order.orders.invoice_number }}</td>
    <td>{{ order.products.name }}</td>
    <td>{{ order.customers.customer_name }}</td>
</tr>
{% endfor %}

【问题讨论】:

  • 试试&lt;td&gt;{{ order.product.name }}&lt;/td&gt;。另请参阅thread
  • 您的建议无效。因此,他通过将select_related 作为模型的一部分来解决问题。我想将其保留在视图中,并将其作为contextrequest 发送到模板。
  • 作为@alecxe 评论,您的ForeignKey 被称为product 而不是products。所以你必须使用order.product.name
  • 嗯,我的 ForeignKey 不是叫product_id,不是products? @sgmart @alecxe
  • 还是谢谢你们,你们帮我弄明白了。

标签: python django django-templates django-select-related


【解决方案1】:

我想通了。我把这个问题和答案留给下一个必须解决这个难题的可怜人。

{% for order in list_of_orders %}
<tr>
    <td>{{ order.order_id.cust_id.customer_name }}</td>
    <td>{{ order.order_id.invoice_number }}</td>
    <td>{{ order.order_id.invoice_creation_date }}</td>
    <td>{{ order.product_id.price }}</td>
</tr>
{% endfor %}

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2011-10-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2011-12-16
    • 2011-07-10
    • 2016-05-06
    • 1970-01-01
    相关资源
    最近更新 更多