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.