2011-09-23 52 views
1

我有,我想在同一視圖中拔出子數據(相關的)一個基本的數據庫:Django的子查詢

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(總計),以便在模板中我可以放上:

{% for invoice in invoices %} 
    {{ invoice.subtotal }} 
{% endfor %} 

我認爲這是與某些東西在models.py文件中做的事情,但我迷失了與此。

所以任何幫助將不勝感激。

回答

1

你想用aggregation

from django.db.models import Sum 

def list_invoices(request): 
    invoices = Item.objects.all().annotate(subtotal=Sum('invoiceline__price')) 
+0

感謝它的工作原理治療。 我可以在熔爐中再添加一個問題: 如果我在invoiceline類中有另一個名爲qty的字段,那麼我可以使用相同的方法執行多次計算,如小計= SUM(數量*價格)? – ausi1972

+0

不幸的不是。你需要用SQL來做,也許用'extra'方法。 –

+0

我記得關於在models.py文件中放置一個def語句之前,它允許您定義一個可調用像get_invoice_total(request):subtotal = self.invoiceline.price * self.invoiceline.qty返回小計 – ausi1972