无法访问Django-Oscar中的产品价格?

Cod*_*mon 4 python django django-oscar

试图访问产品的价格,使用文档.但是获得属性错误.

>>> from oscar.apps.partner import strategy, prices
>>> from oscar.apps.catalogue.models import *
>>> product = Product.objects.get(pk=1)
>>> info = strategy.fetch_for_product(product)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'module' object has no attribute 'fetch_for_product'
Run Code Online (Sandbox Code Playgroud)

要查看策略的所有属性,我会这样做

  >>> dir(strategy)
  >>> ['Base', 'D', 'Default', 'DeferredTax', 'FixedRateTax', 'NoTax', 'PurchaseInfo', 
    'Selector', 'StockRequired', 'Structured', 'UK', 'US', 'UseFirstStockRecord', 
'__builtins__', '__doc__', '__file__', '__name__',
 '__package__', 'availability', 'namedtuple', 'prices']
Run Code Online (Sandbox Code Playgroud)

所以fetch_for_product不属于策略属性.现在我如何获取特定产品的价格?

pat*_*rys 7

您在上面导入的是策略模块.你想要的是策略对象.获取策略的最简单方法是向策略选择器询问:

from oscar.apps.partner.strategy import Selector

selector = Selector()
strategy = selector.strategy(request=..., user=...)
purchase_info = strategy.fetch_for_product(product=...)
price = purchase_info.price
Run Code Online (Sandbox Code Playgroud)

选择器很有用,因为它允许您根据上下文使用不同的策略(特定用户,来自特定国家/地区的请求等).在您自己的商店中,您将Selector使用自己的实现覆盖它,默认情况下它将返回Default策略.

有关更多信息,请参阅文档.