Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django oscar的战略中应用可变税?_Python_Django_Django Oscar - Fatal编程技术网

Python 如何在django oscar的战略中应用可变税?

Python 如何在django oscar的战略中应用可变税?,python,django,django-oscar,Python,Django,Django Oscar,我正在为印度做一个奥斯卡项目,现在我想对产品征税。 我已经按照申请税收的文件,分叉了合作伙伴应用程序。当我指定rate=('0.20')时,它对所有产品都征收20%的税,现在我想让它成为动态的 因此,我研究了strategy.FixedRateTax的代码,并尝试实现get_rate()的代码,因为所有产品都会调用它 我希望如何使其动态化,是基于我希望对get_rate()中的产品征税的产品类别 所以我在core/models.py中创建了一个模型 class CategoryTax(model

我正在为印度做一个奥斯卡项目,现在我想对产品征税。 我已经按照申请税收的文件,分叉了合作伙伴应用程序。当我指定rate=('0.20')时,它对所有产品都征收20%的税,现在我想让它成为动态的

因此,我研究了strategy.FixedRateTax的代码,并尝试实现get_rate()的代码,因为所有产品都会调用它

我希望如何使其动态化,是基于我希望对get_rate()中的产品征税的产品类别

所以我在core/models.py中创建了一个模型

class CategoryTax(models.Model):
    category = models.OneToOneField(Category, on_delete=models.CASCADE, unique=True)
    gst_tax = models.DecimalField(max_digits=11, decimal_places=4, null=True, default=0)

    def __str__(self):
        return "%s" % self.category
在这里导入类别模型工作正常,但当我转到strategy.py并从core和其他应用程序导入模型时,django给出了一个例外

我的forked_apps/partner/strategy.py是:

from decimal import Decimal as D
from oscar.apps.partner import strategy, prices
from django.conf import settings

from oscar.core.loading import get_model
from core.models import CategoryTax

Partner = get_model('partner', 'Partner')
Category = get_model('catalogue', 'Category')
Product = get_model('catalogue', 'Product')
ProductCategory = get_model('catalogue', 'ProductCategory')


class Selector(object):
    """
    Custom selector to return a India-specific strategy that charges GST
    """

    def strategy(self, request=None, user=None, **kwargs):
        return IndiaStrategy()


class IncludingVAT(strategy.FixedRateTax):
    """
    Price policy to charge VAT on the base price
    """
    # We can simply override the tax rate on the core FixedRateTax.  Note
    # this is a simplification: in reality, you might want to store tax
    # rates and the date ranges they apply in a database table.  Your
    # pricing policy could simply look up the appropriate rate.

    # The Tax rate applied here is 3 % GST Now
    rate = D(settings.SITE_GST)

    def get_rate(self, product, stockrecord):
        """
        This method serves as hook to be able to plug in support for varying tax rates
        based on the product.

        TODO: Needs tests.
        """

        try:
            product = Product.objects.get(id=product.id)
            prod_cat = ProductCategory.objects.get(product=product)
            cat = Category.objects.get(id=prod_cat.category_id)

            cat_tax = CategoryTax.objects.get(category=cat)
            print("The Cat Tax: ", cat_tax)

        except Exception as e:
            print(e)
        return self.rate
class IndiaStrategy(strategy.UseFirstStockRecord, IncludingVAT,
             strategy.StockRequired, strategy.Structured):
    """
    Typical India strategy for physical goods.

    - There's only one warehouse/partner so we use the first and only stockrecord
    - Enforce stock level.  Don't allow purchases when we don't have stock.
    - Charge Indian GST on prices.  Assume everything is standard-rated.
    """
我得到的例外是:

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
而且:
ImportError:无法导入名称“CategoryTax”

请务必向我建议任何可能的方法,我可以使用它来完成这项工作

我使用的是Django 2.1.3和Django Oscar 1.6.4

整个错误堆栈跟踪:

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f623e655400>
Traceback (most recent call last):
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/core/loading.py", line 296, in get_model
    return apps.get_model(app_label, model_name)
  File "/home/venvs/test/lib/python3.6/site-packages/django/apps/registry.py", line 195, in get_model
    self.check_models_ready()
  File "/home/venvs/test/lib/python3.6/site-packages/django/apps/registry.py", line 137, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/core/loading.py", line 296, in get_model
    return apps.get_model(app_label, model_name)
  File "/home/venvs/test/lib/python3.6/site-packages/django/apps/registry.py", line 195, in get_model
    self.check_models_ready()
  File "/home/venvs/test/lib/python3.6/site-packages/django/apps/registry.py", line 137, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/venvs/test/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/home/test/abhushan/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
    autoreload.raise_last_exception()
  File "/home/venvs/test/lib/python3.6/site-packages/django/utils/autoreload.py", line 248, in raise_last_exception
    raise _exception[1]
  File "/home/venvs/test/lib/python3.6/site-packages/django/core/management/__init__.py", line 337, in execute
    autoreload.check_errors(django.setup)()
  File "/home/venvs/test/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/home/venvs/test/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/venvs/test/lib/python3.6/site-packages/django/apps/registry.py", line 112, in populate
    app_config.import_models()
  File "/home/venvs/test/lib/python3.6/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/home/venvs/test/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/venvs/test/project/core/models.py", line 8, in <module>
    Category = get_model('catalogue', 'Category')
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/core/loading.py", line 308, in get_model
    import_module('%s.%s' % (app_config.name, MODELS_MODULE_NAME))
  File "/home/venvs/test/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/apps/catalogue/models.py", line 4, in <module>
    from oscar.apps.catalogue.abstract_models import *  # noqa
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/apps/catalogue/abstract_models.py", line 35, in <module>
    Selector = get_class('partner.strategy', 'Selector')
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/core/loading.py", line 59, in get_class
    return get_classes(module_label, [classname], module_prefix)[0]
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/core/loading.py", line 69, in get_classes
    return class_loader(module_label, classnames, module_prefix)
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/core/loading.py", line 141, in default_class_loader
    local_module = _import_module(local_module_label, classnames)
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/core/loading.py", line 182, in _import_module
    return __import__(module_label, fromlist=classnames)
  File "/home/test/forked_apps/partner/strategy.py", line 16, in <module>
    Category = get_model('catalogue', 'Category')
  File "/home/venvs/test/lib/python3.6/site-packages/oscar/core/loading.py", line 311, in get_model
    return apps.get_registered_model(app_label, model_name)
  File "/home/venvs/test/lib/python3.6/site-packages/django/apps/registry.py", line 270, in get_registered_model
    "Model '%s.%s' not registered." % (app_label, model_name))
LookupError: Model 'catalogue.Category' not registered.
由启动的线程中未处理的异常 回溯(最近一次呼叫最后一次): get_模型中的文件“/home/venvs/test/lib/python3.6/site packages/oscar/core/loading.py”,第296行 返回应用程序。获取应用程序模型(应用程序标签、模型名称) get_模型中的文件“/home/venvs/test/lib/python3.6/site packages/django/apps/registry.py”,第195行 self.check_models_ready() 文件“/home/venvs/test/lib/python3.6/site packages/django/apps/registry.py”,第137行,在check\u models\u ready中 raise AppRegistryNotReady(“尚未加载模型”) django.core.exceptions.AppRegistryNotReady:尚未加载模型。 在处理上述异常期间,发生了另一个异常: 回溯(最近一次呼叫最后一次): get_模型中的文件“/home/venvs/test/lib/python3.6/site packages/oscar/core/loading.py”,第296行 返回应用程序。获取应用程序模型(应用程序标签、模型名称) get_模型中的文件“/home/venvs/test/lib/python3.6/site packages/django/apps/registry.py”,第195行 self.check_models_ready() 文件“/home/venvs/test/lib/python3.6/site packages/django/apps/registry.py”,第137行,在check\u models\u ready中 raise AppRegistryNotReady(“尚未加载模型”) django.core.exceptions.AppRegistryNotReady:尚未加载模型。 在处理上述异常期间,发生了另一个异常: 回溯(最近一次呼叫最后一次): 包装器中的文件“/home/venvs/test/lib/python3.6/site packages/django/utils/autoreload.py”,第225行 fn(*args,**kwargs) 文件“/home/test/abhushan/lib/python3.6/site packages/django/core/management/commands/runserver.py”,第109行,在内部运行 autoreload.raise\u last\u异常() 文件“/home/venvs/test/lib/python3.6/site packages/django/utils/autoreload.py”,第248行,在raise\u last\u异常中 raise_异常[1] 文件“/home/venvs/test/lib/python3.6/site packages/django/core/management/_init__.py”,第337行,在execute中 自动加载检查错误(django.setup)() 包装器中的文件“/home/venvs/test/lib/python3.6/site packages/django/utils/autoreload.py”,第225行 fn(*args,**kwargs) 文件“/home/venvs/test/lib/python3.6/site packages/django/_init__.py”,第24行,在安装程序中 应用程序。填充(设置。已安装的应用程序) 文件“/home/venvs/test/lib/python3.6/site packages/django/apps/registry.py”,第112行,填充 app_config.import_models() 文件“/home/venvs/test/lib/python3.6/site packages/django/apps/config.py”,第198行,在import\u模型中 self.models\u module=导入模块(models\u module\u name) 导入模块中的文件“/home/venvs/test/lib/python3.6/importlib/_init__uuuu.py”,第126行 return _bootstrap._gcd_import(名称[级别:],包,级别) 文件“”,第994行,在_gcd_导入中 文件“”,第971行,在_find_和_load中 文件“”,第955行,在“查找”和“加载”中解锁 文件“”,第665行,在“加载”中 exec_模块中第678行的文件“” 文件“”,第219行,在“调用”中,删除了“帧” 文件“/home/venvs/test/project/core/models.py”,第8行,在 类别=获取模型('目录','类别') 文件“/home/venvs/test/lib/python3.6/site packages/oscar/core/loading.py”,第308行,在get_模型中 导入模块(“%s.%s%”(app\u config.name,MODELS\u module\u name)) 导入模块中的文件“/home/venvs/test/lib/python3.6/importlib/_init__uuuu.py”,第126行 return _bootstrap._gcd_import(名称[级别:],包,级别) 文件“”,第994行,在_gcd_导入中 文件“”,第971行,在_find_和_load中 文件“”,第955行,在“查找”和“加载”中解锁 文件“”,第665行,在“加载”中 exec_模块中第678行的文件“” 文件“”,第219行,在“调用”中,删除了“帧” 文件“/home/venvs/test/lib/python3.6/site packages/oscar/apps/catalog/models.py”,第4行,在 来自oscar.apps.catalog.abstract_models import*#noqa 文件“/home/venvs/test/lib/python3.6/site packages/oscar/apps/catalog/abstract_models.py”,第35行,在 选择器=获取类('partner.strategy','Selector')) 文件“/home/venvs/test/lib/python3.6/site packages/oscar/core/load.py”,第59行,在get_类中 返回get_类(模块标签,[类名],模块前缀)[0] 文件“/home/venvs/test/lib/python3.6/site packages/oscar/core/loading.py”,第69行,在get\u类中 返回类装入器(模块标签、类名、模块前缀) 文件“/home/venvs/test/lib/python3.6/site packages/oscar/core/loading.py”,第141行,默认为类加载器 本地\u模块=\u导入\u模块(本地\u模块\u标签,类名) 文件“/home/venvs/test/lib/python3.6/site packages/oscar/core/load.py”,第182行,在导入模块中 return\uuuu import\uuuu(模块标签,fromlist=classnames) 文件“/home/test/forked_apps/partner/strategy.py”,第16行,在 类别=获取模型('目录','类别') 文件“/home/venvs/test/lib/python3.6/site packages/oscar/core/loading.py”,第311行,在get_模型中 返回应用程序。获取注册的应用程序模型(应用程序标签、模型名称) 文件“/主页
def get_rate(self, product, stockrecord):
    Category = get_model('catalogue', 'Category')
    Product = get_model('catalogue', 'Product')
    ProductCategory = get_model('catalogue', 'ProductCategory')
    # do your logic here