0

1 つのビューで 3 つのフォームを処理しようとしています。説明します:これは、配送先住所、請求先住所、クレジットカード情報用のフォームがあるチェックアウトフォームです。

私の問題は、請求先住所が配送先住所と同じかどうかをユーザーに選択させたいということです。チェックボックスで作りました。

しかし、今は 3 つのフォームがあるため、検証に行き詰まっています。それらを処理する方法がわかりません。

これが私のコードです:

def show_checkout(request, template_name='checkout/checkout.html'):
user = User.objects.filter(pk=request.user.id)
if request.method == 'POST':
    form = CheckoutForm(request.POST)
    form_adress = ShippingForm(request.POST)
    if form.is_valid() and form_adress.is_valid():
        response = process(request)
        form_adress.save(commit=False)

        if not form_adress.same_adress:
            form_adress.user_shipping = user
            form_adress.user_billing = user
        else:
            form_adress.user_shipping = user
            form_billing = BillingForm(request.POST)
            form_billing.save(commit=False)
            form_billing.user_billing = user
            form_billing.save()
        form_adress.save()
        order_number = response.get('order_number', 0)
        error_message = response.get('message', '')
        if order_number:
            request.session['order_number'] = order_number
            receipt_url = urlresolvers.reverse('checkout_receipt')
            return HttpResponseRedirect(receipt_url)
    else:
        error_message = 'Correct the errors below'
else:
    form = CheckoutForm()
    form_adress = ShippingForm()
    form_billing = BillingForm()
    error_message = None
if cart.is_empty(request):
    cart_url = urlresolvers.reverse('show_cart')
    return HttpResponseRedirect(cart_url)
page_title = 'Checkout'
return render(request, template_name, {
    'error_message': error_message,
    'page_title': page_title,
    'form': form,
    'form_adress': form_adress,
    'form_billing': form_billing,
    },
context_instance=RequestContext(request))

そして私のテンプレート:

<form action="." method="post" class="row-fluid">
{% csrf_token %}
<div class="adress span10">
<fieldset class="checkout" style="float:left;"> 
<legend>Shipping Info</legend>
{{ form_adress.as_p }}
</fieldset>
<fieldset class="checkout billing_adress" style="float:left;">
<legend>Billing Info</legend>
{{ form_billing.as_p }}
</fieldset>
</div>
<fieldset class="checkout row-fluid">
<legend>Credit Card Info</legend>
<table>
{% form_table_row form.name %}
{% form_table_row form.lastname %}
{% form_table_row form.credit_card_number %}
{% form_table_row form.credit_card_type %}
{% form_table_row form.credit_card_expire_month %}
{% form_table_row form.credit_card_expire_year %}
{% form_table_row form.credit_card_cvv %}
</table>
</fieldset>
<table>
<tr>
<th colspan="2"><input type="submit" value="Place Order" class="submit" /></th>
</tr>
</table>
</form>

そして私のフォーム:

class ShippingForm(forms.ModelForm):
    same_adress = forms.BooleanField(required=True, label="different address for billing ?")

class Meta:
    model = Address
    exclude = 'user_billing, user_shipping'


class BillingForm(forms.ModelForm):

    class Meta:
        model = Address
        exclude = 'user_billing, user_shipping'

今のところ、割り当て前に参照されるローカル変数「form_billing」に直面しています

助言がありますか ?

前もって感謝します !

4

1 に答える 1

1

が有効で、false で、0のform_billing場合は初期化していません。form_adressform_adress.same_adressorder_number

のコンテキストでそれを参照していますrender()

また、次の場合は次のようになります

if not form_adress.same_adress:

する必要があります

if form_adress.same_adress:
于 2013-04-25T09:35:18.397 に答える