Найти - Пользователи
Полная версия: Формы, радиобутоны и передача данных
Начало » Django » Формы, радиобутоны и передача данных
1 2
dreamer-s
Доброго времени суток. Реализовал я форму с радиобутонами и тут наткнулся на проблемы. Суть задачи, есть категория товаров, когда человек выбирает категорию, то ему отображаются товары этой категории. Реализовать надо с помощью радиобутонов.
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>
но увы, данные не отображаются. Помогите решить данную задачу, ведь картинки картинками, но еще как-то в корзину надо добавлять, а я не могу получить данные….
FishHook
ИМХО, в таких случаях удобнее заюзать какой-нибудь MVC-фреймворк на клиентской стороне, например angular.js и дёргать данные с сервера аяксом.
Тут, как говорится, чучше день потерять, потом за пять минут долететь.


P.S.
Category.objects.filter(id__exact=category_id)[0]
А чем Вам не нравится get?
dreamer-s
post, get… Тут вопрос в том, почему не получается отображать эти данные в шаблоне. Попробую get, но мне кажется это не изменит ситуацию. Да, смену картинок на клиентской стороне с помощью js необходимо реализовать, но и как то надо добавлять данные в корзину, то есть все упирается в доставание данных. Дело в том, что если я делаю
<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>
то с виду все хорошо, но я не могу достать сразу id, name, photo(url на photo). id и name достаю, но что-то не получалось достать photo.
Чесно говоря с js не дружу. Помогите добить эту часть, подскажите куда копать, буду благодарен любой подсказке
FishHook
dreamer-s
post, get


Category.objects.get(id=category_id)
FishHook
dreamer-s, Вы понимаете, что такое AJAX?
dreamer-s
Понял, что сказал глупость. Имею общие представления. Я понимаю, как примерно (!) работает. Посмотрю, просто мне до конца неясно, как взять необходимые данные для создания радиобутонов с событиями для последующей обработки
FishHook
События, картинки, нихрена не понятно.
Нарисуйте в паинте, чего Вы хотите.
dreamer-s
допустим есть 2 категории. В первой 3 товара, во второй 2. Человек переходит по какой-то категории и ему соответственно отображаются 3 или 2 радиобутона с наименованиями товаров. По клику на радиобутон меняется картинка товара на соответствующий выбраного радиобутона. Собственно вот. Ну а в дальнейшем при submit идет добавление товара в корзину.
dreamer-s
post, get
Я прочитал, что написал, прошу прощения, двое суток на то время не спал. Хотя тогда я прекрасно понял что вы имели в виду
Category.objects.filter(id__exact=category_id)[0]
или
Category.objects.get(id=category_id)
разницы все равно нет.
да и не в том вопрос. Может кто подскажет?
В этих обсуждениях
http://softwaremaniacs.org/forum/django/40291/
говорится
Кароче если в коде можно сделать вот это:
form.fields.queryset = pen.objects.all()
То в шаблоне можно сделать так:
{% for p in form.pen.queryset %}
если я использую queryset у меня данные не отображаются вообще. Поэтому юзаю choices.
self.fields['radio'].choices =Product.objects.all(category_id__exact=param).values_list('id', 'name', 'photo')
Как используя данный запрос передать ВСЕ значения в шаблон?
FishHook
>>>разницы все равно нет
Как говорил Чапаев, есть Петька один нюанс.


Ок.
Давай по порядку. Нужна форма с выбором категорий в виде радиобаттонов?
class CategoryForm(forms.ModelForm):
    class Meta:
        model = Category
        widgets = {
            "name": forms.widgets.RadioSelect(),
        }

<form method="post">{% csrf_token %}
{{ form.as_ul }}
<input type="submit" value="Выбери категорию">
</form>


Это понятно?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB