Доступ к атрибутам продукта django oscar
Я хочу получить доступ к значению атрибута продукта. Я определил атрибут продукта с кодом weight
и введите float
, На мой взгляд, я пытаюсь получить к нему доступ, как показано ниже:
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'
Я попытался посмотреть на модель Оскара, но не смог найти решение. Пожалуйста помоги.
2 ответа
Решение
Я бы порекомендовал скопировать метод Django Oscar shipping/sizes.py Scale class weight_product().
Там они используют свойство 'value' свойства '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
Чтобы получить или установить атрибут по коду, просто выполните:
product.attr.code
например, если код вашего атрибута "вес":
product.attr.weight = 125
Я нашел этот пример в коде для oscar.apps.catalogue.product_attributes
(django-oscar 1.4) и работает как в python, так и в шаблонах.