2015-05-26 5 views
1

Попытка сделать форму с двумя вкладками (в императивном стиле) для деформирования 2, дуршлаг 1.0. Идея формы заключается в выборе между добавлением веб-страницы, и это название вручную, или в качестве альтернативы подачи URL:Deform 2/схема дуршлаг с двумя вкладками даже не проверяет

@property 
def webpage_form(self): 
    schema = colander.SchemaNode(colander.Mapping(unknown='preserve'), 
           name="webpage_schema") 

    schema_page = colander.SchemaNode(colander.Mapping(unknown='preserve'), 
       title=u"Webpage", missing={}) 
    webpage_name = colander.SchemaNode(
     colander.String(), 
     name='webpage_name', 
     default=u'Webpage', 
     missing=u'', 
    ) 
    webpage_url = colander.SchemaNode(
     colander.String(), 
     name='url', 
     default=u'-', 
     missing=u'', 
    ) 

    schema_page.add(webpage_name) 
    schema_page.add(webpage_url) 

    schema_feed = colander.SchemaNode(colander.Mapping(unknown='preserve'), 
       title=u"Feed", missing={}) 
    feed = colander.SchemaNode(
     colander.String(), 
     name='feed_url', 
     default=u'-', 
     missing=u'', 
    ) 

    schema_feed.add(feed) 

    schema.add(schema_page) 
    schema.add(schema_feed) 
    return deform.Form(schema, buttons=('submit',)) 

В контроллере формы (пирамида):

controls = request.POST.items() 
... 
appstruct = self.webpage_form.validate(controls) 

В то время как элементы управления, кажется, данные:

[('_charset_', u'UTF-8'), 
    ('__formid__', u'deform'), 
    ('__start__', u':mapping'), 
    ('webpage_name', u'Webpage'), 
    ('url', u'http://slashdot.org'), 
    ('__end__', u':mapping'), 
    ('__start__', u':mapping'), 
    ('feed_url', u'-'), 
    ('__end__', u':mapping'), 
    ('submit', u'submit')] 

appstruct пуст:

{'': {}} 

Экспериментирован с заголовком, отсутствует, по умолчанию, неизвестные параметры, без результата. Что не так с формой?

Кроме того, вместо двух вкладок есть два последовательных набора полей, но это может быть другая история.

ответ

0

Решила проблему. Параметр name должен использоваться с colander.SchemaNode, а не title. Получающееся в результате приложение выглядит следующим образом:

{'feed': {'feed_url': u''}, 
'webpage': {'url': u'http://slashdot.org', 'webpage_name': u'Slashdot'}} 

что и ожидалось.

Это помогло читать the docs снова: объект узла

Каждой схемы имеет необходимый тип, необязательные составитель для регулировочных данных после десериализации, дополнительный валидатор для десериализованных подготовленных данных, опциональный умолчанию, опционально отсутствует, необязательное название, необязательное описание, и немного меньше необязательное имя.

Смежные вопросы