So I have an issue here.  I'm  trying to render a form, a product form with 
associated credit card collection, etc.  

The problem is this: The client wants the product to be rendered like so:

<radio button>Choice     item price    item setup fee (can be edited)

So I've got a series of products that are output as a choice field using a 
radio widget.  How do I output the item price as well as a item setup fee 
for each line?  

My solution right now has been to almost ignore Django's forms and just do 
it manually--but that means I'm skipping Django's validation and having to 
do it manually, and trying to output initial values for all three fields on 
failed validation is baffling me.  

Current template snippet:  

> {% for radio in products %} 
>        <div  class='row'>
>         <div class='four columns'><p><label>
>         <input  type="radio" name='product' value="{{ radio.item }}" {% if 
> selectedProduct == radio.item %} checked="true" {% endif %}> {{ radio.item 
> }}</label></p></div> 
>         <div class="two columns"><p>${{ radio.price }}</p></div>
>         <div class = "six columns"><p>Setup Fee: <input type='text' 
> name="setup-{{ 
> radio.item }}" value="{{ radio.setup_fee }}"></p></div>
>         </div>
> {% endfor %} 
>
>
View Code (slightly edited)
category = Product.objects.filter(category__name="bubba")
    products = ProductItem.objects.filter(product=category)
    products = products.order_by('pk')
    selectedProduct = False
    if request.method == 'POST':  # If the form has been submitted...
        
        bubba = bubbaForm(request.POST)
        payment = PaymentForm(request.POST)  # A form bound to the POST data
        if 'product' in request.POST:
            validProduct = True
            selectedProduct = request.POST['product']
        else:
            validProduct = False
        # print bubba
        print request.POST
        # All validation rules pass
        if bubba.is_valid() and payment.is_valid() and validProduct:
            # Process the data in form.cleaned_data
            # print "in post"
            from datetime import date
            from django.template.defaultfilters import slugify
            cart = Cart()
            cart.client_email = bubba.cleaned_data['client_email']
            cart.client_name = bubba.cleaned_data['client_name']
            cart.client_phone = bubba.cleaned_data['client_phone']
            cart.salesman = request.user
            product = InvoiceItem()
            setup = InvoiceItem()
            item = ProductItem.objects.get(item=request.POST['product'])
            product.item = item
            product.price = item.price
            product.description = "The product the client selected"
            product.slug = slugify(product.item)
            product.recurring = True
            product.recurring_interval = "monthly"
            product.recurring_start_date = date.today()


            setupName = 'setup-' + request.POST['product']


            setup.item = "Setup Fee"
            setup.price = Decimal(request.POST[setupName])  # item.setup_fee
            setup.description = "Setup Fee"
            setup.slug = "setup-fee"
            setup.recurring = False


            cart.order_total = product.price + setup.price


            # print bubba.cleaned_data
            ccData = dict(bubba.cleaned_data.items() + payment.cleaned_data.
items())
            ccData['product'] = request.POST['product']
            ccData['price'] = item.price
            ccData['setup_fee'] = setup.price
            print ccData
            processCC(request, ccData)

# this code relies on responses from processCC:
            if request.session.get('transaction_status') != "Approved":
                return HttpResponseRedirect('/sales/bubba/error/')
            else:
                return HttpResponseRedirect('/sales/bubba/thanks/')  # 
Redirect after POST
        else:  # we didn't pass validation, so we need to rebind products
            pass
    else:
        bubba = bubbaForm()  # An unbound form
        payment = PaymentForm()


    data = {'bubba': bubba, 'payment': payment, 'products': products,
            'selectedProduct': selectedProduct}
    # print 'selectedProduct' + str(selectedProduct)


    return render(request, "sales/salesCart.html", data)

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/b6c86088-76cb-4d26-9357-a1686f3d3110%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to