首页 > 解决方案 > 如何验证 Django Oscar 中的帐单地址信息?

问题描述

如何在我的 Django Oscar 付款详细信息视图中收集帐单地址信息?到目前为止,我已经在 github 和方法 handle_place_order_submission() 中阅读了 Django Oscar 的代码:https ://github.com/django-oscar/django-oscar/blob/05049733e5c6152e37f7b99d957fd67d825c78b8/src/oscar/apps/checkout/views .py#L442,代码为:

    def handle_place_order_submission(self, request):
        return self.submit(**self.build_submission())

他们说我应该重写这个方法,然后调用 build_submission。所以我已经分叉了我的结帐应用程序,然后在 PaymentDetailsView() 下。我编写了一个名为 build_submission 的函数,还从 oscar.apps.payment.forms import BillingAddressForm 导入了 BillingAddressForm()。

    def build_submission(self, **kwargs):
        submission = super(
            PaymentDetailsView, self).build_submission(**kwargs)
        submission['billing_address'] = BillingAddressForm(self.request.POST)
        return submission

我在 payment_details.html 表单中使用了 {{ billing_address_form }}。代码在这里:

<form action="{% url 'checkout:preview' %}" class="form-stacked" method="POST">
        {% csrf_token %}
        <div class="well">
            <!--<div class="container form-group" style="margin: 0 auto;text-align: center">-->
                {{ billing_address_form }}
            <!--</div>-->
        </div>
            <br>
            <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                    data-key="{{ stripe_publishable_key }}" 
                    data-amount="{{ order_total_incl_tax_cents }}"
                    data-name="{{ shop_name }}"
                    data-locale="auto"
                    data-currency="cad"
                    data-description="{{ basket.num_items }} items ({{ order_total.incl_tax|currency }})">
            </script>
    </form>

现在如何验证帐单地址表格,我应该创建一些单独的方法吗?我是 Oscar 的新手,所以一些代码的答案可能会帮助我更好地理解。或者有没有其他方法可以从用户那里收集账单地址?

标签: pythondjangopython-3.xdjango-oscar

解决方案


我无法使用JavaScript+进行验证google maps services。将表单的提交按钮设置为禁用,直到谷歌地图返回地址中有有效地址。

为了向google询问地址的正确性,您必须将此类地址的所有片段放在一起,我的意思是,记住一个完整的地址是由该格式的几个字段组成的,例如:line1, line2, postcode, country, 等...

或者 ...

您可以在表单的方法中使用Python+ Python Client for Google Maps Services进行验证。clean您必须记住,表单无效,无法为用户设置正确的消息,说明原因。

如果验证失败,您将重定向到哪个页面取决于您。


推荐阅读