views.py
def product_once(request, category_id): product_once = Category.objects.filter(id__exact=category_id)[0] product_value = Product.objects.filter(category_id__exact=category_id) if request.method == 'POST': form = ChooseForm(data=request.POST) if form.is_valid(): pass else: form = ChooseForm(param=category_id) context = {'product': product_once, 'value': product_value, 'form':form} return render(request, 'product_once.html', context)
forms.py
class ChooseForm(forms.Form): radio = forms.ChoiceField() def __init__(self, param=None, *args, **kw): super(ChooseForm, self).__init__(*args, **kw) self.fields['radio'].widget=forms.RadioSelect() self.fields['radio'].label='' self.fields['radio'].empty_label=None self.fields['radio'].choices =Product.objects.filter(category_id__exact=param).values_list('id', 'name', 'id', 'photo')
<form action="." method="post">{% csrf_token %} <table> {% for field in form %} {{ field }} {% endfor %} <tr> <td colspan="2"><input type="submit" value="Купить" /></td> </tr> </table> </form>
Сразу наткнулся на проблему. Когда человек нажимает на радиобутон, то необходимо, что бы картинка сменилась, обработать как-то с помощью яваскрипта, но мне же надо знать ссылку на картинку хотя бы, а так, как у меня реализовано - не всю информацию можно достать.
self.fields['radio'].choices =Product.objects.filter(category_id__exact=param).values_list('id', 'name', 'id', 'photo')
на просторах инета нашел http://softwaremaniacs.org/forum/django/40291/ и по той информации я сделал следующее
{% for p in form.fields.radio.choices %} <tr> <td><input type="radio" name="radio" value="{{ p.pk }}"></td> <td>{{ p.name }}</td> <td>{{ p.photo }}</td> </tr> {% endfor %} <tr>