我已经使用oscar_fork_app命令将运输应用程序分叉到一个名为forked_apps的文件夹中,并且还添加到settings.py get_core_apps(['forked_apps.shipping'])中,我只想创建提到的两种运输方法,即标准方法和表达方法此链接中的文档:https://django-oscar.readthedocs.io/en/latest/howto/how_to_configure_shipping.html。
在 init .py中,我已有以下代码:
default_app_config = 'forked_apps.shipping.config.ShippingConfig'
在repository.py中,我这样写:
from oscar.apps.shipping import repository
from .methods import *
class Repository(repository.Repository):
def get_available_shipping_methods(
self, basket, user=None, shipping_addr=None,
request=None, **kwargs):
methods = (Standard())
print("\n\nFetch availble shipping methods")
if shipping_addr:
# Express is only available in the UK
methods = (Standard(), Express())
return methods
在methods.py中,我写过:
from decimal import Decimal as D
from oscar.apps.shipping import methods
from oscar.core import prices
class Standard(methods.FixedPrice):
code = 'standard'
name = 'Standard shipping'
charge_excl_tax = D('5.00')
class Express(methods.FixedPrice):
code = 'express'
name = 'Express shipping'
charge_excl_tax = D('10.00')
应该发生的是,应该显示shipping_methods.html页面,但是,在输入送货地址之后,它将直接转到付款明细页面;通常只有在未定义任何运输方式的情况下才会发生这种情况,但是我在上面的代码中实现了两种运输方式,即standard和Express。即使打印语句不起作用,我也无法弄清楚如何实现此目的。 我还必须编写其他代码吗?
如果您已经实现了,有人可以提供带有一些代码的解决方案吗?
答案 0 :(得分:1)
从设置中删除oscar应用。
例如:
#oscar.apps.checkout
#oscar.apps.shipping
等
答案 1 :(得分:1)
这部分给我错误。我无法解决这个问题。
get_available_shipping_methods(
self, basket, user=None, shipping_addr=None,
request=None, **kwargs):
...
Django版本。 > 2.1 |奥斯卡版>最新
我这样使用它;
mkdir customapp
touch customapp/__init__.py
python manage.py oscar_fork_app shipping customapp/
编辑settings.py
from oscar import get_core_apps
INSTALLED_APPS = INSTALLED_APPS + get_core_apps(
['customapp.shipping'])
在我们的customapp / shipping目录中添加了名为(repository.py)的新文件
from oscar.apps.shipping import repository
from . import methods
class Repository(repository.Repository):
methods = (methods.Standard(),)
然后将新文件添加到同一目录下,名为customapp / shipping,命名为(methods.py)
from oscar.apps.shipping import methods
from oscar.core import prices
from decimal import Decimal as D
class Standard(methods.Base):
code = 'standard'
name = 'Shipping (Standard)'
def calculate(self, basket):
return prices.Price(
currency=basket.currency,
excl_tax=D('5.00'), incl_tax=D('5.00'))
您可以添加更多方法。
然后运行这些命令;
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
希望这会有所帮助。