我想访问产品属性的值。我已使用代码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'
我试过调查奥斯卡的模型,但无法找到解决方案。请帮忙。
答案 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和模板中都有效。