首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oscar提供应用程序覆盖福利功能冲突错误

Oscar提供应用程序覆盖福利功能冲突错误
EN

Stack Overflow用户
提问于 2019-05-25 10:57:37
回答 1查看 247关注 0票数 2

我使用奥斯卡1.6.4版本。我想在PercentageDiscountBenefit中重写oscar.app.offer.benefits.py。但是会发生冲突错误。我如何才能覆盖这个函数?

代码语言:javascript
复制
from oscar.core.loading import get_classes

CorePercentageDiscountBenefit, CoreAbsoluteDiscountBenefit = get_classes('offer.benefits', ['PercentageDiscountBenefit', 'AbsoluteDiscountBenefit'])


class PercentageDiscountBenefit(CorePercentageDiscountBenefit):

    def apply(self, basket, condition, offer, discount_amount=None,
              max_total_discount=None):

        print(
            "\n\n\n\n",
            "PRINT SOMETHING",
            "\n\n\n\n",
        )
        return super().apply(basket, condition, offer, discount_amount,
              max_total_discount)


class AbsoluteDiscountBenefit(CoreAbsoluteDiscountBenefit):

    def apply(self, basket, condition, offer, discount_amount=None,
              max_total_discount=None):

        print(
            "\n\n\n\n",
            "PRINT SOMETHING",
            "\n\n\n\n",
        )
        return super().apply(basket, condition, offer, discount_amount,
              max_total_discount)

错误日志

代码语言:javascript
复制
RuntimeError at /basket/

Conflicting 'percentagediscountbenefit' models in application 'offer': <class 'oscar.apps.offer.benefits.PercentageDiscountBenefit'> and <class 'oscar_apps.offer.benefits.PercentageDiscountBenefit'>.

Request Method:     GET
Request URL:    http://localhost:8000/basket/
Django Version:     1.11.9
Exception Type:     RuntimeError
Exception Value:    

Conflicting 'percentagediscountbenefit' models in application 'offer': <class 'oscar.apps.offer.benefits.PercentageDiscountBenefit'> and <class 'oscar_apps.offer.benefits.PercentageDiscountBenefit'>.

Exception Location:     /home/seyidov/PycharmProjects/Backend/embahome-backend/.venv/lib/python3.5/site-packages/django/apps/registry.py in register_model, line 224
Python Executable:  /home/seyidov/PycharmProjects/Backend/embahome-backend/.venv/bin/python
Python Version:     3.5.2
Python Path:    

['/home/seyidov/PycharmProjects/Backend/embahome-backend',
 '/home/seyidov/PycharmProjects/Backend/embahome-backend',
 '/usr/lib/python35.zip',
 '/usr/lib/python3.5',
 '/usr/lib/python3.5/plat-x86_64-linux-gnu',
 '/usr/lib/python3.5/lib-dynload',
 '/home/seyidov/PycharmProjects/Backend/embahome-backend/.venv/lib/python3.5/site-packages',
 '/home/seyidov/Documents/Programs/pycharm-2018.2.4/helpers/pycharm_matplotlib_backend',
 '/home/seyidov/PycharmProjects/Backend/embahome-backend']
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-26 03:09:16

您不能以这种方式覆盖受益类。如果您想要创建将不同逻辑应用于核心逻辑的自定义好处,则需要创建您自己的类,它是核心Benefit模型的代理:

代码语言:javascript
复制
from oscar.apps.offer import models

class CustomPercentageDiscountBenefit(models.Benefit):

    class Meta:
        proxy = True

    def apply(self, basket, condition, offer, discount_amount=None, max_total_discount=None):
        # Apply your benefit here

这在文档中的更多细节中得到了解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56304171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档