【发布时间】:2020-08-16 08:07:33
【问题描述】:
我正在开发一个基本的电子商务网站。我创建了一个超级用户页面,我想在其中查看所有订单以及订单详细信息,例如订购的客户、他们的地址等。这些是我的 models.py:
class ShippingAddress(models.Model):
customer=models.ForeignKey(Customer,on_delete=models.SET_NULL,null=True)
order=models.ForeignKey(Order,on_delete=models.SET_NULL,null=True)
address=models.CharField(max_length=200,null=False)
email=models.EmailField(null=False)
class Customer(models.Model):
user=models.OneToOneField(MyUser,null=True,blank=True,on_delete=models.CASCADE)
email=models.CharField(max_length=100)
class Order(models.Model):
customer=models.ForeignKey(Customer,on_delete=models.SET_NULL,null=True,blank=True)
complete=models.BooleanField(default=False,null=True,blank=False)
class OrderItem(models.Model):
product=models.ForeignKey(Product,on_delete=models.SET_NULL,null=True)
order=models.ForeignKey(Order,on_delete=models.SET_NULL,null=True,)
这是我的views.py:
def superuser(request):
user=User.objects.all()
customer=Customer.objects.all()
order=Order.objects.filter(complete=True)
items=OrderItem.objects.all()
shipping=ShippingAddress.objects.all()
return render(request,"superuser.html",{'order':order,'items':items,'customer':customer,'shipping':shipping})
目前在我的模板中,我无法遍历上述上下文,以便我可以获取所有订单,并且对于每个订单,我都可以打印他们的订单项以及运输详细信息以及客户详细信息。我尝试了一种非常有效的方式,即遍历所有订单,然后遍历所有订单项并检查 orderitem.order.id 是否等于 order.id 。请告诉我在上下文中传递对我的需要最有效的对象的最佳方法是什么。以及如何在我的模板中迭代它们。 谢谢
【问题讨论】:
-
OrderItem引用了一个Product模型,你能把那个也包括进来吗?为了更好地理解你想要做什么,我将尝试描述一个“伪对象”,看看它是否能满足你的需求:一个“订单”对象,你可以循环遍历每个“订单”的位置:1 a 'customer_details' 属性将保存客户详细信息,2 一个 'shipping_address' 属性和 3 一个属性 'order_items' 您可以循环访问以获取所有相关的订单项目。这个假设的“订单”对象会包含您需要的所有信息吗? :) -
会的。我的产品模型只是一个以产品名称和价格为字段的模型