Django模型中的派生属性

时间:2013-12-19 20:14:26

标签: django django-models

我有这两个模型:

class Product(models.Model):

    category = models.ForeignKey('Category')

    name = models.CharField(max_length=60, verbose_name=u'نام کالا')
    price = models.PositiveIntegerField(verbose_name=u'قیمت')
    image = models.ImageField(upload_to='products_images', verbose_name=u'عکس')
    #score ???

    def get_score(self):
        pass


class Review(models.Model):

    product = models.ForeignKey('Product')

    rating = models.PositiveSmallIntegerField(max_length=1, verbose_name=u'امتیاز')

如何获得Product被称为分数的派生属性,所以当我调用product.score时,它调用get_score函数并返回从Review模型计算的平均分数?
例如,如果某个产品有两个评分为4和2的评论,我希望product.score返回3。

1 个答案:

答案 0 :(得分:2)

如果您为方法score命名,则可以使用属性:

@property
def score(self):
    pass

这意味着product.score将返回该方法的结果。然而,这一切都发生在Django的ORM之外,因此它不会被识别为模型中的字段。尽管如此,它可以在您的Python代码和模板中使用{{ product.score }}