我创建了一个父产品 taj mahal tea,我在其中创建了它的子产品 taj mahal tea 1 kg 变体,并给出了价格(不含税)和零售价,您可以在这张图片中看到。
但是当我尝试访问价格对象时,我无法在其中获取零售价属性。这是我的示例代码:
from oscar.core.loading import get_class, get_model
from oscar.apps.partner.strategy import Selector
Product = get_model('catalogue', 'Product')
product = Product.objects.filter(id=11).first()
strategy = Selector().strategy()
info = strategy.fetch_for_product(product)
print(info.price)
输出:
FixedPrice({'currency': 'INR', 'excl_tax': Decimal('400.00'), 'tax': Decimal('0.00')})
这是我的测试代码及其输出:
>>> strategy = Selector().strategy()
>>> info = strategy.fetch_for_product(product)
>>> info
PurchaseInfo(price=FixedPrice({'currency': 'INR', 'excl_tax': Decimal('400.00'), 'tax': Decimal('0.00')}), availability=<oscar.apps.partner.availability.StockRequired object at 0x7f2db2324e80>, stockrecord=<StockRecord: Partner: Aapnik, product: Taj mahal 1 kg (xyz)>)
>>> info.price
FixedPrice({'currency': 'INR', 'excl_tax': Decimal('400.00'), 'tax': Decimal('0.00')})
我们将不胜感激任何帮助。
这是预料之中的,虽然有些令人困惑的行为。股票记录中的零售价字段未在 Oscar 的核心中使用 - 它只是作为数据字段存在,实际上在 Oscar 1.6 中已弃用。
默认策略(我猜这就是您正在使用的策略)仅使用价格排除。税,这就是你所看到的。
如果您想使用零售价,您需要提供自己的策略类来执行此操作。请记住,虽然该字段已弃用,但将来会从 Oscar 核心中删除。
在一个单独的注释中,您发布的代码实际上应该失败并出现异常,因为这一行:
product = Product.objects.filter(id=11)
product
在这种情况下不会是 Product
对象,而是 queryset,它不是 Strategy 的有效参数.fetch_for_product()
.
您可能想改为执行 Product.objects.get(id=11)
。
我是一名优秀的程序员,十分优秀!