2017-07-05 69 views
2
##models.py 
    from django.db import models 
    from django.contrib.auth.models import User 
    import numpy as np 

    class Wine(models.Model): 
     name=models.CharField(max_length=200)   
     def average_rating(self): 
      all_ratings = map(lambda x: x.rating, self.review_set.all()) 
      return np.mean(all_ratings) 
     def __unicode__(self): 
      return self.name 

爲什麼這個錯誤顯示?第7行出現了什麼問題?不支持的操作數類型爲:'map'和'int'

+1

如果你得到一個錯誤,你可以張貼完整回溯?我假設numpy不喜歡地圖對象,試着通過'list(map(...))'把它變成一個列表。 – syntonym

+0

謝謝@syntonym它的工作 – sandeep135

回答

2

不知道爲什麼你想用這個numpy。你可以很容易地自己計算出平均值,但爲什麼不讓數據庫通過它的聚合特徵來完成呢?

from django.db.models import Avg 
... 
def average_rating(self): 
    return self.review_set.aggregate(Avg('rating'))['rating__avg'] 
+0

感謝解決方案..我做了名單,而不是地圖,它的工作。 – sandeep135

0

這會爲你工作: -

from django.db import models 
from django.contrib.auth.models import User 
import numpy as np 

class Wine(models.Model): 
    name=models.CharField(max_length=200)   
    def average_rating(self): 
     all_ratings = list(map(lambda x: x.rating, self.review_set.all())) 
     return np.mean(all_ratings) 
    def __unicode__(self): 
     return self.name 
相關問題