分叉运输应用程序对Django oscar无效

时间:2018-07-10 12:26:40

标签: python django python-3.x django-oscar

我已经使用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。即使打印语句不起作用,我也无法弄清楚如何实现此目的。 我还必须编写其他代码吗?

如果您已经实现了,有人可以提供带有一些代码的解决方案吗?

2 个答案:

答案 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

希望这会有所帮助。