Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 16, 2015 17:19:32

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка формы селект

есть форма селект. не могу никак получить из нее выбранные значения.
Суть в том чтобы вьюха получила выбранное значение - вернула html с аргументом.
html

<form name="doc_tip" action="/tips/" method="post">{% csrf_token %}
    <p><select>
        <optgroup label="Договорная">
            <option value="r1" name="r1" id="r1">Доходный</option>
            <option value="r2" name="r2" id="r2">Расходный</option>
            <option value="r3" name="r3" id="r3">Разное</option>
        </optgroup>
        <optgroup label="Инф-справоч">
            <option value="t1" name="t1" id="t1">СЗ</option>
            <option value="t2" name="t2" id="t2">Заявка</option>
            <option value="t3" name="t3" id="t3">Разное</option>
        </optgroup>
    </select></p>
    <p>
        <input type="radio" value="r11">dohod <br>
        <input type="radio" value="r22">rashod
    </p>
    <p><input type="submit" value="Send"></p>
</form>
вьюха которая не работает ( посути пишет, что я не возвращаю html (так как в цикле нету else), но я и не получаю из формы ничего кроме csrf токена)
def tips(request):
    args = {}
    args.update(csrf(request))
    args['trueq_create'] = 1
    args['trueqq'] = 1
    args['username'] = auth.get_user(request).username
    if request.method == 'POST':
        if 'r1' in request.POST:
            args['trueq_tips1'] = 1
            return render_to_response('create_docsup.html', args, context_instance=RequestContext(request))
        elif 'r2' in request.POST:
            args['trueq_tips2'] = 1
            return render_to_response('create_docsup.html', args, context_instance=RequestContext(request))
        elif 'r11' in request.POST:
            args['trueq_tips1'] = 1
            return render_to_response('create_docsup.html', args, context_instance=RequestContext(request))
        elif 'r22' in request.POST:
            args['trueq_tips2'] = 1
            return render_to_response('create_docsup.html', args, context_instance=RequestContext(request))
    else:
        return redirect('/')

Отредактировано Xa_xoo (Окт. 18, 2015 12:31:57)

Офлайн

#2 Окт. 17, 2015 09:21:49

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

обработка формы селект

Xa_xoo
есть форма селект
И где форма? И где селект?



Офлайн

#3 Окт. 18, 2015 12:31:45

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка формы селект

я прошу прощение, не то сбросил. Поправил в первом посте

Офлайн

#4 Окт. 18, 2015 12:47:36

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

обработка формы селект

Для того чтобы форма отправила значение контрола, у него обязательно должен быть элемент name.
Не у option, а у select.



Офлайн

#5 Окт. 19, 2015 09:47:52

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка формы селект

Fishhook, спасибо, обозвал селект и теперь передает в пост)

Офлайн

#6 Окт. 22, 2015 16:24:20

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка формы селект

данные из формы получаю, но как мне перехватить Value? из селекта я должен выбрать value и на основании этого вернуть соответствующие данные… использовать request.POST.values()? как это должно выглядить? можно пример какой-нибудь?

Офлайн

#7 Окт. 22, 2015 16:24:41

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка формы селект

данные из формы получаю, но как мне перехватить Value? из селекта я должен выбрать value и на основании этого вернуть соответствующие данные… использовать request.POST.values()? как это должно выглядить? можно пример какой-нибудь?

Офлайн

#8 Окт. 22, 2015 19:23:00

Petr_Kashyapov
Зарегистрирован: 2015-05-09
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка формы селект

Если в select добавить name=“choice”
то
получить value можно будет с помощью

request.POST['choice']

    <p><select name="choice">
        <optgroup label="Договорная">
            <option value="r1value"  id="r1">Доходный</option>

Более подробно здесь https://docs.djangoproject.com/en/1.8/intro/tutorial04/

Отредактировано Petr_Kashyapov (Окт. 22, 2015 19:23:45)

Офлайн

#9 Окт. 23, 2015 08:55:05

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка формы селект

спасибо

Офлайн

#10 Окт. 23, 2015 12:19:03

Xa_xoo
Зарегистрирован: 2015-08-28
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

обработка формы селект

сейчас проблема такова:
суть в том чтобы получить заполненную форму (текст, фаил). И сохранить это в бд как отдельный объект.
создал модель:

class Karto(models.Model):
    id_name = models.IntegerField(default=0)
    small = models.CharField(max_length=255)
    file = models.FileField(upload_to='uploads')
создал форму:
class CreateKarto(forms.Form):
    class Meta():
        model = Karto
        fields = ['small', 'file']
        widgets = {
            'small': Textarea(attrs={'cols': 80, 'rows': 30}),
        }
соответственно форма в шаблоне:
<form action="/dokarto/" method="POST">{% csrf_token %}
    <label for name="small">Краткое содержание</label>
    <textarea name="small" cols="80" rows="20"></textarea><br><br>
    <input type="file" name="file"><br><br>    
<input type="submit" value="click">
</form>
и обработка вьюхой:
def create_karto(request):
    args = {}
    args.update(csrf(request))
    if request.method == 'POST':
        if request.POST and ("pause" not in request.session):
            form = CreateKarto(request.POST)
            if form.is_valid():
                instances = form.save()
                request.session.set_expiry(60)
                request.session['pause'] = True
                args['create_done'] = 1
                render_to_response('create_docsup.html', args, context_instance=RequestContext(request))
            else:
                redirect('/docsup/', args)
        else:
            redirect('/docsup/', args)
    else:
        redirect('/docsup/', args)
выдает ошибку AttributeErroe: ‘CreateKarto’ object has no attribute ‘save’
ругается на form.save()

Отредактировано Xa_xoo (Окт. 23, 2015 12:35:49)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version