2013-12-19 2 views
2

У меня есть эти две модели:производный атрибут в модели Django

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

Если вы называете свой метод score можно использовать свойство:

@property 
def score(self): 
    pass 

и это означает, что product.score вернет результат этого метода. Однако все это происходит вне ORM Django, поэтому оно не будет распознано как поле вашей модели. Тем не менее он работает в вашем коде Python и в ваших шаблонах вы можете использовать {{ product.score }}.

+0

Благодарим вас за короткий и хорошо описанный ответ. Я соглашусь, что в качестве ответа –

Смежные вопросы