【问题标题】:Accessing django oscar product attributes访问 django oscar 产品属性
【发布时间】:2015-02-19 16:54:20
【问题描述】:

我想访问产品属性的值。我用代码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'

我尝试研究 oscar 的模型,但找不到解决方案。请帮忙。

【问题讨论】:

    标签: python django django-oscar


    【解决方案1】:

    我建议复制 Django Oscar shipping/scales.py Scale 类 weigh_product() method.

    在那里,他们使用产品的 'attribute_values' 属性的'value' 属性。

    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
    

    【讨论】:

      【解决方案2】:

      要通过代码获取或设置属性,只需:

      product.attr.code
      

      例如,如果你的属性代码是“重量”:

      product.attr.weight = 125
      

      我在oscar.apps.catalogue.product_attributes(django-oscar 1.4)的代码中找到了该示例,它在 python 和模板中都有效。

      【讨论】:

      • 请注意,您需要致电 product.attr.save() 以使您的分配持久化。
      猜你喜欢
      • 2018-10-06
      • 2015-11-03
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 2015-07-12
      • 1970-01-01
      相关资源
      最近更新 更多