Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误位于/orders/';QuerySet';对象没有属性';订单项_Python_Django - Fatal编程技术网

Python 属性错误位于/orders/';QuerySet';对象没有属性';订单项

Python 属性错误位于/orders/';QuerySet';对象没有属性';订单项,python,django,Python,Django,我正在django项目中工作,我想显示客户的所有订单。 这是my models.py: class Order(models.Model): customer=models.ForeignKey(Customer,on_delete=models.SET_NULL,null=True,blank=True) date_ordered=models.DateTimeField(auto_now_add=True) complete=models.BooleanField(d

我正在django项目中工作,我想显示客户的所有订单。 这是my models.py:

class Order(models.Model):
    customer=models.ForeignKey(Customer,on_delete=models.SET_NULL,null=True,blank=True)
    date_ordered=models.DateTimeField(auto_now_add=True)
    complete=models.BooleanField(default=False,null=True,blank=False)
    transaction_id=models.CharField(max_length=100,null=True)

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)
    quantity=models.IntegerField(default=0,null=True,blank=False)
    date_added=models.DateTimeField(auto_now_add=True)
这是my views.py:

def orders(request):
    customer=request.user.customer
    order=Order.objects.filter(customer=customer, complete=True)
    items=order.orderitem.get(order=order)
    return render(request,"orders.html",{'order':order,})
打开此模板时,会出现错误:查询集对象没有属性orderitem。我希望它能给我complete=True的订单,以及该特定订单下的所有orderitems,这样我就可以迭代它们,并在模板中显示它们,但这对我来说是不可能的。 请帮忙。任何帮助都将不胜感激。

相关的\u name=“order\u items”
添加到
order item
字段中,如下所示

order=models.ForeignKey(Order,on_delete=models.SET_NULL,null=True, related_name="order_items")
现在,您可以像这样访问订单的
order\u项目

order=Order.objects.filter(customer=customer, complete=True).first()
items = order.order_items
您可以使用以下选项:

items=OrderItem.objects.all()
在模板中,您可以使用一个循环并给出一个if条件,查看您的模型,如:

{% for ord in orders %}
{% for item in items %}
{% if item.order.id == ord.id %}

这不是最有效的方法,因为它将迭代数据库中的所有项目,但它可能适合您

@rohitbumrah更新了答案。你也应该先调用
。但是如果一个用户有多个订单呢。我想把它们全部显示在屏幕上once@VATSALJAIN然后您应该使用
all
而不是
first
,并且对于每个
订单
访问
order.order\u项目
。查看上面的我的答案。我过去也有同样的问题。检查它是否有效,还有什么更好的方法……这对我来说是一个危险的解决方案!如果存在大量的
OrderItem
对象,这可能会导致应用程序发生灾难。更好的方法是先过滤客户订单,然后过滤订单的订单项。是的,准确地说……我可以过滤客户订单,但我找不到过滤订单的订单项的方法…@mehdy你告诉我的解决方案给了我同样的查询错误set@rohitbumrah你用我最新的解决方案测试了吗?我有一些问题。首先,添加相关的_名称会影响我的其他功能。第二,我如何迭代它,因为之前我可以使用if-else,但现在呢?