在一个模板中显示来自多个表的数据
Display data from multiple tables in one Template
我正在尝试为客户下的订单创建仪表板。我有多个 table,但我正在处理的两个是“Order”和“Order_Detail”。从“订单”table,我需要显示客户、状态和 Required_date,从“Order_Detail”table,我需要产品。我可以访问数据,但我可以弄清楚如何在一页上同时显示所有记录。
models.py
class Order(models.Model):
STATUS = (
('New', 'New'),
('Ready For Fullfillment', 'Ready For Fullfillment'),
('Fullfilled Ready For Delivery', 'Fullfilled Ready For Delivery'),
('Out For Delivery', 'Out For Delivery'),
('Delivered', 'Delivered'),
)
order_date = models.DateTimeField(auto_now_add=True, null=True)
required_date = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True, choices=STATUS)
note = models.CharField(max_length=1000, null=True, blank=True)
customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL)
def __str__(self):
return self.customer.name
class Order_Detail(models.Model):
orderNumber = models.ForeignKey(Order, null=True, on_delete=models.SET_NULL)
product = models.ForeignKey(Product, null=True, on_delete=models.SET_NULL)
pounds = models.IntegerField(null=True)
ounces = models.IntegerField(null=True)
container = models.ForeignKey(Container, null=True, on_delete=models.SET_NULL)
lot_code = models.CharField(max_length=200, null=True, blank=True)
note = models.CharField(max_length=1000, null=True, blank=True)
在我的 views.py 中,我正在使用以下代码:
print('TEST2')
o = Order.objects.all()
o_notdelivered = Order.objects.exclude(status='Delivered')
for e in o_notdelivered:
print('Order ID:', e.id)
order_detail_data = serializers.serialize("python", Order_Detail.objects.all().filter(orderNumber=e.id))
print('order_detail_data:', order_detail_data)
使用该代码,我能够获取 ORDER 数据和相关的 ORDER_DETAIL 数据,但我不知道如何将我需要的字段放在一起并将其发送到我的模板。请注意,它们将是多个订单,并且 order_details 需要转到模板。
基本上,最后,我想要在我的仪表板上显示一个如下所示的 table:
|客户|产品|所需日期|状态|
|-|-|-|-|
|C1|产品1|此处为日期|新|
|C2|Product3|此处为日期|新|
在你的模板(.html 文件)中你必须访问这个变量,例如,如果你想显示所有包的状态,那么,在 html 文件中你应该写这样的东西:
{% for object in o %} <!-- Works like in python-->
<h1>{{object.status}}</h1>
<!-- Do this for all other attributes-->
{% endfor %} <!-- Must close 'for loop'-->
在您的视图中使用此查询 Order_Detail.objects.all()
并传递上下文。
views.py
order_details = Order_Detail.objects.all()
context = {'order_details':order_details }
....your others code
然后在你的 html:
{{order_details.product}} #accessing data from your Order_Detail model
{{order_details.orderNumber.status}} #accessing data from your Order model via foreignkey
我正在尝试为客户下的订单创建仪表板。我有多个 table,但我正在处理的两个是“Order”和“Order_Detail”。从“订单”table,我需要显示客户、状态和 Required_date,从“Order_Detail”table,我需要产品。我可以访问数据,但我可以弄清楚如何在一页上同时显示所有记录。
models.py
class Order(models.Model):
STATUS = (
('New', 'New'),
('Ready For Fullfillment', 'Ready For Fullfillment'),
('Fullfilled Ready For Delivery', 'Fullfilled Ready For Delivery'),
('Out For Delivery', 'Out For Delivery'),
('Delivered', 'Delivered'),
)
order_date = models.DateTimeField(auto_now_add=True, null=True)
required_date = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True, choices=STATUS)
note = models.CharField(max_length=1000, null=True, blank=True)
customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL)
def __str__(self):
return self.customer.name
class Order_Detail(models.Model):
orderNumber = models.ForeignKey(Order, null=True, on_delete=models.SET_NULL)
product = models.ForeignKey(Product, null=True, on_delete=models.SET_NULL)
pounds = models.IntegerField(null=True)
ounces = models.IntegerField(null=True)
container = models.ForeignKey(Container, null=True, on_delete=models.SET_NULL)
lot_code = models.CharField(max_length=200, null=True, blank=True)
note = models.CharField(max_length=1000, null=True, blank=True)
在我的 views.py 中,我正在使用以下代码:
print('TEST2')
o = Order.objects.all()
o_notdelivered = Order.objects.exclude(status='Delivered')
for e in o_notdelivered:
print('Order ID:', e.id)
order_detail_data = serializers.serialize("python", Order_Detail.objects.all().filter(orderNumber=e.id))
print('order_detail_data:', order_detail_data)
使用该代码,我能够获取 ORDER 数据和相关的 ORDER_DETAIL 数据,但我不知道如何将我需要的字段放在一起并将其发送到我的模板。请注意,它们将是多个订单,并且 order_details 需要转到模板。
基本上,最后,我想要在我的仪表板上显示一个如下所示的 table: |客户|产品|所需日期|状态| |-|-|-|-| |C1|产品1|此处为日期|新| |C2|Product3|此处为日期|新|
在你的模板(.html 文件)中你必须访问这个变量,例如,如果你想显示所有包的状态,那么,在 html 文件中你应该写这样的东西:
{% for object in o %} <!-- Works like in python-->
<h1>{{object.status}}</h1>
<!-- Do this for all other attributes-->
{% endfor %} <!-- Must close 'for loop'-->
在您的视图中使用此查询 Order_Detail.objects.all()
并传递上下文。
views.py
order_details = Order_Detail.objects.all()
context = {'order_details':order_details }
....your others code
然后在你的 html:
{{order_details.product}} #accessing data from your Order_Detail model
{{order_details.orderNumber.status}} #accessing data from your Order model via foreignkey