Public
Snippet $13 authored by Owo Sugiana

Dynamic Form

agent.py
from pyramid.view import view_config
from pyramid.exceptions import HTTPNotFound
from deform import (
    Form,
    Button,
    )
import colander


class Modem(colander.Schema):
    id = colander.SchemaNode(colander.String(), title='IMSI')
    msisdn = colander.SchemaNode(colander.String(), title='Nomor HP')
    keterangan = colander.SchemaNode(colander.String())


class Mailer(colander.Schema):
    id = colander.SchemaNode(colander.String(), title='Email')
    keterangan = colander.SchemaNode(colander.String())


SCHEMAS = {
    1: Modem,
    6: Mailer,
    }


@view_config(route_name='agent-add', renderer='templates/agent/add.pt')
def view_agent_add(request):
    jalur_id = request.matchdict['jalur']
    jalur_id = int(jalur_id)
    if jalur_id not in SCHEMAS:
        return HTTPNotFound()
    schema_cls = SCHEMAS[jalur_id]
    schema = schema_cls()
    btn_save = Button('save', 'Simpan')
    btn_cancel = Button('cancel', 'Batalkan')
    buttons = (btn_save, btn_cancel)
    form = Form(schema, buttons=buttons)
    return dict(title='Tambah Agent', form=form.render())