【问题标题】:Derived attribute in Django modelDjango模型中的派生属性
【发布时间】:2013-12-19 20:14:26
【问题描述】:

我有这两个模型:

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 提供一个名为 score 的派生属性,所以当我调用 product.score 时,它会调用 get_score 函数并返回从 Review 模型计算的平均分数?
例如,如果一个产品有两个评分为 4 和 2 的评论,我想product.score 返回 3。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

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

    @property
    def score(self):
        pass
    

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

    【讨论】:

    • 感谢您的简短而详尽的回答。我会接受这个答案
    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多