Django 中多关系数据库的 ORM
ORM for Multiple relational databases in Django
假设我在一个应用程序中有 3 个模型,我需要使用订单 Class 获取商品的价格。我怎样才能实现这样的功能?此外,由于 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 时,它没有显示任何内容。
因为 items
是 ManyToManyField,你必须做:
for order_item in order.items.all():
print(order_item.item.price)
def get_price(request):
order = Order.objects.get(user=request.user, ordered=False)
for order_item in order.items.all():
print(order_item.item.price)
您无需循环获取所有价格。您可以像这样 aggregate 他们:
from django.db.models import Sum
order = Order.objects.get(user=request.user, ordered=False)
total_price = order.items.aggregate(total=Sum('price'))['total']
假设我在一个应用程序中有 3 个模型,我需要使用订单 Class 获取商品的价格。我怎样才能实现这样的功能?此外,由于 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 时,它没有显示任何内容。
因为 items
是 ManyToManyField,你必须做:
for order_item in order.items.all():
print(order_item.item.price)
def get_price(request):
order = Order.objects.get(user=request.user, ordered=False)
for order_item in order.items.all():
print(order_item.item.price)
您无需循环获取所有价格。您可以像这样 aggregate 他们:
from django.db.models import Sum
order = Order.objects.get(user=request.user, ordered=False)
total_price = order.items.aggregate(total=Sum('price'))['total']