访问django oscar产品属性

时间:2014-12-21 09:56:11

标签: python django 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 个答案:

答案 0 :(得分:5)

我建议复制Django Oscar shipping / scales.py Scale class 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 :(得分:3)

要按代码获取或设置属性,只需执行以下操作:

product.attr.weight = 125

例如,如果属性的代码是“weight”:

oscar.apps.catalogue.product_attributes

我在isFirst: boolean = true; ngOnChanges(changes: SimpleChanges) { if (this.isFirst) { this.isFirst = false; return; } console.log(changes); } (django-oscar 1.4)的代码中找到了这个示例,它在python和模板中都有效。