Не удалось получить розничную цену в django oscar - PullRequest
1 голос
/ 23 июня 2019

Я создал один родительский продукт чай Тадж-Махал, в котором я создал его дочерний продукт, чай Тадж-Махал вариант 1 кг, и дал цену (исключая налог) и Розничную цену, которые вы видите на этом изображении.

enter image description here

Но когда я пытаюсь получить доступ к объекту цены, я не смог получить в нем атрибут розничной цены. вот мой пример кода:

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')})

Любая помощь будет очень полезна.

1 Ответ

3 голосов
/ 24 июня 2019

Это ожидаемое, хотя и несколько запутанное поведение. Поле розничной цены в отчете о запасах нигде не используется в ядре Оскара - оно просто там как поле данных и фактически осуждается в Оскаре 1.6.

Стратегия по умолчанию (которую, я думаю, вы используете) использует только цену без учета. налог, который вы видите.

Если вы хотите использовать розничную цену, вам нужно будет предоставить свой собственный класс стратегии, который делает это. Имейте в виду, что это поле устарело и будет удалено из ядра Оскара в будущем.

На отдельном примечании код, который вы опубликовали, должен действительно завершиться с ошибкой из-за этой строки:

product = Product.objects.filter(id=11)

product в этом случае это будет не Product объект, а queryset , который не является допустимым аргументом для Strategy.fetch_for_product().

Вы, вероятно, хотите вместо этого сделать Product.objects.get(id=11).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...