2013-12-19 191 views
2

我有這兩種模式:派生屬性

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個2條評論中,我想product.score返回3

回答

1

如果你的名字你的方法score你可以使用一個屬性:

@property 
def score(self): 
    pass 

,這意味着product.score將返回該方法的結果。然而,這一切都發生在Django的ORM之外,因此它不會被識別爲模型中的字段。儘管如此,它可以在你的Python代碼和你可以使用的模板中使用{{ product.score }}

+0

非常感謝您提供的簡短而明確的答案。我會接受這個答案 –