如何在 django-oscar 中添加自定义好处?

How to add custom benefit in django-oscar?

Django-oscar 提供 multibuy 福利类型。

class MultibuyDiscountBenefit(Benefit):
    _description = _("Cheapest product from %(range)s is free")

现在,我可以添加 Buy 1 get 1 free 优惠。

我这里有一点定制需求。我想添加 'Buy 1 get 50% off on second' 报价。为此,我需要添加自定义福利。

我检查了 docs 添加自定义福利。

并且根据文档所说..A custom benefit can be used by creating a benefit class and registering it so it is available to be used.

根据文档,我为此创建了自定义权益。

class MultiBuyCustom(Benefit):

    class Meta:
        proxy = True

    @property
    def description(self):
        """
        Describe what the benefit does.

        This is used in the dashboard when selecting benefits for offers.
        """
        return "But 1 and get 50% off"

这里我不知道如何注册此自定义权益以在仪表板中使用。?创建优惠时,我需要仪表板下拉菜单中的这项福利。

如有任何帮助,我们将不胜感激。

首先,您需要使用以下命令从 oscar 派生出报价应用程序。

./manage.py oscar_fork_app offer apps/shop

可以在 benefits.py 文件中添加自定义福利。低于福利 class 将给予 "cheapest product from the selected range with 50% off"。

class NewCustomBenefit(benefits.Benefit):
    description = "Cheapest product from range is 50% off"

    @property
    def name(self):
        return self.description

    class Meta:
        app_label = 'offer'
        proxy = True
        verbose_name = _("Buy 1 get 50% off")
        verbose_name_plural = _("Buy 1 get 50% off")

    def apply(self, basket, condition, offer):
        line_tuples = self.get_applicable_lines(offer, basket, range=condition.range)
        if not line_tuples:
            return results.ZERO_DISCOUNT

        # Cheapest line gives 50% off on second product
        discount, line = line_tuples[0]
        discount /= 2
        apply_discount(line, discount, 1)

        affected_lines = [(line, discount, 1)]
        condition.consume_items(offer, basket, affected_lines)
        return results.BasketDiscount(discount)

    def __unicode__(self):
        return unicode(self.name)

现在,下一步是在从仪表板添加优惠的同时使用此权益。您可以从下拉列表中选择 select 预定义 benefit/incentive。

现在,要在此处使用此权益,您需要从管理面板注册我们的自定义权益。所以,按照下面的截图。 您必须在自定义 class 字段中输入自定义权益 class 的路径。除此之外,将所有内容留空,因为您将在创建报价时从仪表板添加这些信息。

保存后,您将在第一个屏幕截图中显示的下拉列表中获得您的好处。

有效!问如有其他疑问。