You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在django-oscar-invoices中将InvoiceCreator集成到结账流程

集成oscar_invoices.utils.InvoiceCreator到Django Oscar结账流程的实现方法

以下是两种生产环境常用的集成方案,可根据业务需求选择:

方案1:监听订单信号实现(推荐,低侵入)

不用修改Oscar核心结账流程,通过绑定订单状态变更信号自动触发发票生成,适合绝大多数场景:

  • 首先在你自定义的Django应用中新建signals.py文件,添加如下代码:
from django.db.models.signals import post_save
from django.dispatch import receiver
from oscar.apps.order.models import Order
from oscar_invoices.utils import InvoiceCreator

@receiver(post_save, sender=Order, dispatch_uid="create_invoice_after_order_paid")
def create_invoice_when_order_paid(sender, instance, created, **kwargs):
    # 仅在订单创建且状态为已支付时生成发票,可根据业务调整触发条件
    if created and instance.status == 'Paid':
        creator = InvoiceCreator()
        # 传入订单实例即可生成标准发票,支持自定义字段传参
        invoice = creator.create(order=instance)
        # 自定义参数示例:指定发票号、税率
        # invoice = creator.create(order=instance, invoice_number=f"INV-{instance.number}", tax_rate=0.13)
  • 在自定义应用的apps.py中注册信号,确保项目启动时信号生效:
from django.apps import AppConfig

class YourAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'your_app_name'

    def ready(self):
        # 导入信号文件完成注册
        import your_app_name.signals

方案2:重写结账视图实现

如果需要对发票生成时机做更精细的控制(比如提交订单时立即生成,无需等待支付完成),可以重写Oscar的结账视图:

  • 先按照Django Oscar的标准扩展流程fork checkout应用
  • 在fork后的checkout应用的views.py中,重写PaymentDetailsView的handle_successful_order方法:
from oscar.apps.checkout.views import PaymentDetailsView as CorePaymentDetailsView
from oscar_invoices.utils import InvoiceCreator

class PaymentDetailsView(CorePaymentDetailsView):
    def handle_successful_order(self, order):
        # 先执行原生订单创建逻辑
        response = super().handle_successful_order(order)
        # 触发发票生成
        creator = InvoiceCreator()
        invoice = creator.create(order=order)
        # 可在此处添加自定义逻辑:关联发票到用户账户、发送发票邮件等
        return response

常见注意事项

  • 若需要自定义发票样式,可在项目templates目录下新建oscar_invoices/invoice.html文件,覆盖官方默认模板即可
  • InvoiceCreator.create()方法返回的是Invoice模型实例,可直接对其扩展字段、关联其他业务模型
  • 可根据业务需求调整触发发票生成的条件,比如未支付订单生成预发票、退货时生成红字发票等

内容的提问来源于stack exchange,提问作者om78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:24:02