如何在django-oscar中添加自定义优势?

时间:2017-03-14 07:00:56

标签: django 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"

在这里,我不知道如何将此自定义权益注册到仪表板中使用。在创建优惠时,我在仪表板的下拉列表中需要此优势。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

首先,您需要使用以下命令从奥斯卡提供优惠应用程序。

./manage.py oscar_fork_app offer apps/shop

可以在benefits.py文件中添加自定义权益。以下福利等级将给出“所选范围内最便宜的产品,50%折扣”。

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)

现在,下一步是在从仪表板添加商品时获得此优势。您可以选择从下拉列表中选择预定义的福利/激励。

enter image description here

现在,要在此处获得此优势,您需要从管理面板注册我们的自定义权益。所以,请按照下面的截图。 您必须在自定义类字段中输入自定义福利类的路径。除此之外,将所有内容保留为空白,因为您在创建商品时会从信息中心添加这些信息。

保存完毕后,您可以在下拉菜单中获得优惠,如第一张屏幕截图所示。

enter image description here

有效。询问是否有任何其他疑问。