2015-06-15 58 views
0

我是一個初學者python & django編碼。django不能乘以類型'str'的非整數

我有這樣的模式:

class QuoteRow(models.Model): 
    (...) 
    quantity = models.IntegerField(blank=True, null=True) 
    unit_price = models.DecimalField(max_digits=12, decimal_places=6, blank=True, null=True) 

而這些線路在另一種模式 '報價':

def _total_amount(self): 
     return QuoteRow.objects.filter(quote=self.pk).aggregate(Sum('unit_price' * 'quantity')) 
total_amount = property(_total_amount) 

在shell:

q=Quote.objects.get(pk=2) // valid instance 
q.total_amount 
>>> TyperError: can't multiply sequenceby non-int of type 'str' 

我只能總和「單價「欄或只有」數量「欄沒有問題。

謝謝。

+0

這是總和('unit_price'...'內置'sum()'還是來自其他地方? – IanAuld

+0

內置於django.db.models中的一個導入Sum。Thx –

回答

0

我這樣做:

def _total_amount(self): 
    req = QuoteRow.objects.filter(quote=self.pk) 
    return sum([i.unit_price * i.quantity for i in req]) 

它需要一個更行,但它更清晰給我。

1

嘗試使用extra()

QuoteRow.objects.filter(quote=self.pk).extra(select = {'total': 'SUM(unit_price * quantity)'},) 
+0

有沒有這種方式來加強這一點,因爲它返回一個複雜的對象,這是不是很好的工作?Thx。 –

相關問題