Turbogears Toscwidget не работает

Я искал в этом руководстве и это руководство, и я следовал примерам. Это мой контроллер в controllers/root.py:

@expose('rubrica.templates.submitForm')
def add(self, *args, **kw):  
    return dict(page='submitForm', form=SubmitForm)

@expose()
def save_record(self, **kw):
    print('save_record')
    new_contact = Contact(name = kw['name'], phone = kw['phone'])
    model.DBSession.add(new_contact)
    flash(message = "Added new contact")
    redirect('/index')

это SubmitForm.py:

import tw2.core as twc
import tw2.forms as twf
class SubmitForm(twf.Form):
    class child(twf.TableLayout):
        name = twf.TextField(size = 20)
        phone = twf.TextField(size = 20)
        action = '/save_record'
        submit = twf.SubmitButton(value = 'Submit')

а это шаблон:

<head py:block="head" py:strip="True">
    <title py:block="master_title">Aggiungi Contatto</title>
</head>
<body py:block="body" py:strip="True">
    <div>
        ${form.display(value = dict(title = 'Inserisci i dati'))}
    </div>
</body>
</html>

Проблема в том, что save_record не вызывается (action = '/save_record' должен вызывать, но ничего не происходит) Не могу понять почему.. видимо я что-то не так сделал, или чего-то не хватает, но я не могу понять :)

Спасибо за помощь!


person JungleFever    schedule 22.01.2018    source источник


Ответы (1)


action и submit являются свойствами Form, но вы указываете их в Layout. Переместите свойства action и submit в родительскую область, и все должно работать так, как вы ожидаете:

import tw2.core as twc
import tw2.forms as twf

class SubmitForm(twf.Form):
    class child(twf.TableLayout):
        name = twf.TextField(size = 20)
        phone = twf.TextField(size = 20)

    action = '/save_record'
    submit = twf.SubmitButton(value = 'Submit')
person amol    schedule 23.01.2018