【问题标题】:Display data from multiple tables in one Template在一个模板中显示来自多个表的数据
【发布时间】:2023-08-27 21:41:01
【问题描述】:

我正在尝试为客户下的订单创建仪表板。我有多个表,但我正在处理的两个表是“Order”和“Order_Detail”。在“Order”表中,我需要显示 Customer、Status 和 Required_date,从“Order_Detail”表中,我需要 Product。我可以访问数据,但我可以弄清楚如何在一页上同时显示所有记录。

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。

基本上,最后,我希望在我的仪表板上有一个如下所示的表格: |客户|产品|要求日期|状态| |-|-|-|-| |C1|Product1|这里的日期|新品| |C2|Product3|这里的日期|新|

【问题讨论】:

    标签: django django-models django-views django-templates


    【解决方案1】:

    在您的模板(.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'-->
    

    【讨论】:

    • 完美..for循环逻辑太棒了!!!
    【解决方案2】:

    在您的视图中使用此查询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
    
    
    
     
     
         
    

    【讨论】:

    • 天啊……太棒了。关于 Django 和 Python,我需要学习的东西太多了。
    最近更新 更多