Python Django子查询

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

我有一个基本数据库,我想在同一视图中提取子数据(相关):

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_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'))