Доступ к атрибутам продукта 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, так и в шаблонах.

Другие вопросы по тегам