/:'map'和' int'不支持的操作数类型

时间:2017-07-05 14:02:33

标签: python django

##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行出了什么问题?

4 个答案:

答案 0 :(得分:3)

不确定为什么要使用numpy。您可以自己轻松计算平均值,但为什么不让数据库通过其聚合功能来实现呢?

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

答案 1 :(得分: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

答案 2 :(得分:0)

这应该对您有用:更改

return np.mean(all_ratings)  

return np.mean(list(all_ratings))

对我有用 谢谢

答案 3 :(得分:0)

Python 3中,map()返回一个可迭代,而在Python 2中,返回一个列表。 python可迭代和整数之间的任何数学运算(例如均值)都会引发类似的错误。该行:

return np.mean(all_ratings)

在Python 3中抛出上述错误,因为all_ratings是函数map()返回的可迭代对象。您可能正在使用Python3。因此,在进行任何数学运算之前,您需要将all_ratings转换为list,例如np.mean(list(all_ratings))