Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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 Django中多个关系数据库的ORM_Python_Django_Django Orm - Fatal编程技术网

Python Django中多个关系数据库的ORM

Python Django中多个关系数据库的ORM,python,django,django-orm,Python,Django,Django Orm,假设我在一个应用程序中有3个模型,我需要使用Order类获取商品的价格。我怎样才能实现这样的功能?另外,由于OrderItem有多对多字段,我想寻求有关如何从所有项目循环并获取价格的帮助 Models.py class Item(models.Model): title = models.CharField(max_length=100) description = models.TextField() price = models.FloatField() clas

假设我在一个应用程序中有3个模型,我需要使用Order类获取商品的价格。我怎样才能实现这样的功能?另外,由于OrderItem有多对多字段,我想寻求有关如何从所有项目循环并获取价格的帮助

Models.py

class Item(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    price = models.FloatField()


class OrderItem(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                            on_delete=models.CASCADE)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    ordered = models.BooleanField(default=False)

class Order(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    items = models.ManyToManyField(OrderItem)
    start_date = models.DateTimeField(auto_now_add=True)
    ordered_date = models.DateTimeField(auto_now_add=True)
    ordered = models.BooleanField(default=False)
    total_price = models.FloatField(null=True, blank=True)
Views.py

def get_price(request):
    order = Order.objects.filter(user=request.user, ordered=False)
    return render(request, 'ecommpage/history.html', {'order':order})
History.html

{% extends 'account/base.html' %}
{% load static %}
{% block content%}
{%for order_item in order.item.all() %}
{{order_item.items.price}}
{% endfor %}
{% endblock %}
错误消息:

无法分析order.items.all()中的其余部分:“()”


当我试图打印函数get_price时,它没有显示任何内容。

由于
项目
多个字段,您必须执行以下操作:

for order_item in order.items.all():
    print(order_item.item.price)

由于
ManyToManyField,您必须执行以下操作:

for order_item in order.items.all():
    print(order_item.item.price)

您不需要循环获取所有价格。您可以简单地如下所示:

from django.db.models import Sum

order = Order.objects.get(user=request.user, ordered=False)
total_price = order.items.aggregate(total=Sum('price'))['total']

您不需要循环获取所有价格。您可以简单地如下所示:

from django.db.models import Sum

order = Order.objects.get(user=request.user, ordered=False)
total_price = order.items.aggregate(total=Sum('price'))['total']

谢谢,它起作用了。我想知道这是否也适用于模板?是的,它会起作用。我无法在模板上实现代码。什么也看不出来!请编辑您的问题(或创建新问题),并向我们提供模板代码。如果模板的视图是
get\u price
,则它应返回
render
,并在上下文中至少包含
order
。然后,在模板中,您可以循环使用
order.items.all()
我已经编辑了上面的代码。谢谢,它很有效。我想知道这是否也适用于模板?是的,它会起作用。我无法在模板上实现代码。什么也看不出来!请编辑您的问题(或创建新问题),并向我们提供模板代码。如果模板的视图是
get\u price
,则它应返回
render
,并在上下文中至少包含
order
。然后,在模板中,您可以循环使用
order.items.all()
我已经编辑了上面的代码。