2014-12-21 3 views
2

Я хочу получить доступ к значению атрибута продукта. Я определил атрибут продукта с кодом weight и введите float. В своих взглядах я пытаюсь получить доступ к нему, как показано ниже:Доступ к атрибутам продукта django oscar

def red(request): 
    basket = request.basket 
    weight_total = 0 
    for line in basket.all_lines(): 
     weight = line.product.attributes.get(code = 'weight') 
     weight_total += weight.productattributevalue 

Он не работает и дает ошибку:

'ProductAttribute' object has no attribute 'productattributevalue' 

Я пытался смотреть в модели ОСКАР, но не смог найти решение. Пожалуйста помоги.

ответ

4

Я рекомендовал бы копируя Джанго Oscar доставки/scales.py класса Масштаба weigh_product() method.

там, они используют «значения» свойства собственности «attribute_values» в продукта.

try: 
    attr_val = product.attribute_values.get(# Using 'attribute_values' 
     attribute__code=self.attribute)  # Use your own code of 'weight' 
except ObjectDoesNotExist: 
    if self.default_weight is None:   # You can set a default weight. 
     raise ValueError("No attribute %s found for product %s" 
         % (self.attribute, product)) 
    weight = self.default_weight 
else: 
    weight = attr_val.value     # << HERE. using 'value' property 
1

Чтобы получить или установить атрибут с помощью кода, просто сделать:

product.attr.code 

, например, если код вашего атрибута "вес":

product.attr.weight = 125 

Я обнаружил, что пример в коде для oscar.apps.catalogue.product_attributes (django-oscar 1.4), и он работает как в python, так и в шаблонах.

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