我正在尝试根据国家和django-oscar的重量基础编写运输方法。似乎默认的运输方式也必须有这些
from oscar.apps.shipping.methods import Free, FixedPrice, NoShippingRequired
我不需要上述任何一项,只能通过折扣提供折扣。
如何通过repository.py编写,所以我不应用任何这些oscar.apps.shipping.methods import Free,FixedPrice,NoShippingRequired
所以我可以编写我的类Repository(CoreRepository):
不写
methods += [NoShippingRequired()]
methods += [FixedPrice()]
methods += [Free()]
我编写的方法不是基于代码的,而是通过仪表板中的运送菜单实现的。我按照以下方式设置了运费。
https://groups.google.com/forum/#!topic/django-oscar/H4tf20ujm8k
在测试时,在页面上的“运送菜单”中,“手动传送”和“手动传送”都会在页面上显示。并且我的重量为基础的国家运输方式按钮显示给客户。这意味着即使客户是国际化的,客户也可以点击HandDelivery按钮。我希望禁用“HandDelivery”#39; HandDelivery' “运输方式”页面上的按钮,因此客户无法选择此选项。
另一种选择是在此按钮上附加一条消息,以便客户明白点击该按钮意味着在预订后的一周内安排从仓库收集物品。
如何向客户显示该消息?客户未进入付款页面。并发送电子邮件,以便在7天内收集物品?类似于argos,储备,项目,去购物,支付和收集。所以我可以改变“HandDelivery”的描述。预留。然后客户不付款但收取付款。但是如何?
请帮忙。感谢你。
此致
答案 0 :(得分:3)
编辑:显然奥斯卡有几种定义航运的方法;更新答案以涵盖仪表板中定义的方法!
获得forked Oscar's shipping app后,您可以覆盖存储库类,只返回所需的传送。
如果您已通过信息中心定义了基于体重的运费,则可以使用WeightBased
模型获取该运费,并且只返回:
forked_apps /海运/ repository.py:
from oscar.apps.shipping import repository
from oscar.core.loading import get_model
from . import methods
WeightBased = get_model('shipping', 'WeightBased')
class Repository(repository.Repository):
def get_available_shipping_methods(self, basket, user=None,
shipping_addr=None, request=None, **kwargs):
if shipping_addr:
weightbased_set = WeightBased.objects.all()
if weightbased_set:
return ( list(weightbased_set), )
# If no address was specified, or weight-based options are
# not available, return the "Reserve" shipping option
return ( methods.Reserve(), )
forked_apps /海运/ methods.py:
from oscar.apps.shipping import methods
class Reserve(methods.NoShippingRequired):
code = 'RESERVE'
name = 'Reserve'
description = 'Items will be reserved at the warehouse for 7 days'
延迟付款会涉及分配payment app,并且值得自己提出问题。
奥斯卡文件还提供了一些有关进一步定制运输选项的一些信息,包括How to configure shipping"部分。