Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Формы, радиобутоны и передача данных [RSS Feed]

#1 Окт. 11, 2013 11:07:48

dreamer-s
Зарегистрирован: 2012-08-13
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

Доброго времени суток. Реализовал я форму с радиобутонами и тут наткнулся на проблемы. Суть задачи, есть категория товаров, когда человек выбирает категорию, то ему отображаются товары этой категории. Реализовать надо с помощью радиобутонов.
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>
но увы, данные не отображаются. Помогите решить данную задачу, ведь картинки картинками, но еще как-то в корзину надо добавлять, а я не могу получить данные….

Офлайн

#2 Окт. 11, 2013 11:58:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

ИМХО, в таких случаях удобнее заюзать какой-нибудь MVC-фреймворк на клиентской стороне, например angular.js и дёргать данные с сервера аяксом.
Тут, как говорится, чучше день потерять, потом за пять минут долететь.


P.S.

Category.objects.filter(id__exact=category_id)[0]
А чем Вам не нравится get?



Офлайн

#3 Окт. 11, 2013 16:53:57

dreamer-s
Зарегистрирован: 2012-08-13
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

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 не дружу. Помогите добить эту часть, подскажите куда копать, буду благодарен любой подсказке

Офлайн

#4 Окт. 11, 2013 18:13:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

dreamer-s
post, get


Category.objects.get(id=category_id)



Офлайн

#5 Окт. 11, 2013 18:14:16

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

dreamer-s, Вы понимаете, что такое AJAX?



Офлайн

#6 Окт. 11, 2013 18:59:08

dreamer-s
Зарегистрирован: 2012-08-13
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

Понял, что сказал глупость. Имею общие представления. Я понимаю, как примерно (!) работает. Посмотрю, просто мне до конца неясно, как взять необходимые данные для создания радиобутонов с событиями для последующей обработки

Офлайн

#7 Окт. 11, 2013 19:28:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

События, картинки, нихрена не понятно.
Нарисуйте в паинте, чего Вы хотите.



Офлайн

#8 Окт. 11, 2013 20:05:43

dreamer-s
Зарегистрирован: 2012-08-13
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

допустим есть 2 категории. В первой 3 товара, во второй 2. Человек переходит по какой-то категории и ему соответственно отображаются 3 или 2 радиобутона с наименованиями товаров. По клику на радиобутон меняется картинка товара на соответствующий выбраного радиобутона. Собственно вот. Ну а в дальнейшем при submit идет добавление товара в корзину.

Офлайн

#9 Окт. 12, 2013 19:09:23

dreamer-s
Зарегистрирован: 2012-08-13
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

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')
Как используя данный запрос передать ВСЕ значения в шаблон?

Офлайн

#10 Окт. 12, 2013 20:03:08

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Формы, радиобутоны и передача данных

>>>разницы все равно нет
Как говорил Чапаев, есть Петька один нюанс.


Ок.
Давай по порядку. Нужна форма с выбором категорий в виде радиобаттонов?

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>


Это понятно?



Офлайн

  • Начало
  • » Django
  • » Формы, радиобутоны и передача данных[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version