Python Django子查询
我有一个基本数据库,我想在同一视图中提取子数据(相关): models.py:Python Django子查询,python,django,django-models,Python,Django,Django Models,我有一个基本数据库,我想在同一视图中提取子数据(相关): models.py: class InvoiceHeader(models.Model): customer = models.CharField(max_length = 255) number = models.IntegerField(unique = True) class InvoiceLine(models.Model): description = models.CharField(max_leng
class InvoiceHeader(models.Model):
customer = models.CharField(max_length = 255)
number = models.IntegerField(unique = True)
class InvoiceLine(models.Model):
description = models.CharField(max_length = 255)
price = models.DecimalField(max_digits = 10, decimal_places = 2)
invoiceheader = models.ForeignKey(InvoiceHeader)
views.py:
def list_invoices(request):
invoices = InvoiceHeader.objects.all()
我试图获取的是list_invoices视图中的发票总额,它将包含每个invoiceheader的invoicelines.price(Totaled),这样我就可以在模板中输入:
{% for invoice in invoices %}
{{ invoice.subtotal }}
{% endfor %}
我认为这与models.py文件中的def有关,但我对此感到困惑
因此,任何帮助都将不胜感激。您想使用:
您要使用:
谢谢你,这是一种享受。我是否可以在熔炉中再添加一个问题:如果我在invoiceline类中有另一个名为qty的字段,那么我是否可以使用相同的方法执行多个计算,如小计=总和(qty*价格)?不幸的是,没有。您需要在SQL中执行此操作,可能需要使用
extra
方法。我记得在models.py文件中放了一个def语句,它允许您定义一个可调用的语句,如get\u invoice\u total(request):subtotal=self.invoiceline.price*self.invoiceline.qty return subtotals当然,您可以这样做(尽管参数是self
而不是request
)。但这样一来,您就失去了annotate命令的好处,即数据库可以一次性完成所有操作。非常感谢您的帮助。它为我提供了现在开始工作所需的一切。感谢您的帮助,它起到了很大的作用。我是否可以在熔炉中再添加一个问题:如果invoiceline类中有另一个名为qty的字段,那么我是否可以使用相同的方法执行多个计算,如小计=总和(数量*价格)?不幸的是,不可以。您需要在SQL中执行此操作,可能需要使用extra
方法。我记得在models.py文件中放一个def语句,它允许您定义一个可调用的语句,如get\u invoice\u total(请求):subtotal=self.invoiceline.price*self.invoiceline.qty返回小计当然,您可以这样做(尽管参数是self
而不是request
)。但这样一来,您将失去annotate命令的好处,即数据库一次完成所有操作。非常感谢您的帮助。它为我提供了我现在需要的一切。
from django.db.models import Sum
def list_invoices(request):
invoices = Item.objects.all().annotate(subtotal=Sum('invoiceline__price'))