【问题标题】:Django Oscar automatically empties the basket on redeeming an expired voucherDjango Oscar 在兑换过期凭证时自动清空购物篮
【发布时间】:2023-03-25 19:33:01
【问题描述】:

当客户将代金券应用于购物车中的商品并且代金券在结账过程中或购物车内过期时。在结帐过程中,当点击place order 时,购物车会自动清空,并向客户发送此错误You need to add some items to your basket to checkout,这发生在check_basket_is_not_empty method 期间。

谁能帮助我了解 Django-Oscar 的哪个部分可能会以如此激烈的方式修改购物车。我最初的想法是,购物车被清空了,因为一些 oscar 组件试图删除凭证并且也删除了购物车项目。但是在进行更多检查时,我发现凭证已成功删除,但购物车项目可能仅在 PaymentDetailsView 内被删除。

我没有 PaymentDetailsView 的代码。几天前,我开始了 Django 开发人员的工作,我被扔进了这个庞大的 django-oscar 代码库,对此我完全不熟悉。我不允许在网上发布任何代码。我不知道该怎么办,也不想被解雇。任何帮助将不胜感激。

【问题讨论】:

标签: django django-oscar


【解决方案1】:

我仍然不知道是什么导致了这个错误,但我想出了这个解决方案。当您单击“下订单”时,PaymentDetailsView 类被触发,处理所有数据的第一个函数是submit 类。因此,在其中,您可以手动检查request 中的凭证并手动删除凭证。

# removing expired vouchers:
for voucher in self.request.basket.vouchers.all():
     if voucher.is_expired() or not voucher.is_available_to_user(user=self.request.basket.owner)[0]:
        self.request.basket.vouchers.remove(voucher)
        messages.error(self.request,_("The '%(code)s' voucher has expired") % {'code': voucher.code})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多