[英]ForEach and NestedVariables in FormEncode to create array of form items in Pyramid
我正在使用Pyramid和FormEncode來嘗試創建和驗證地址列表。 我正在使用pyramid_simpleform並且一直在查看本教程http://jimmyg.org/blog/2007/multiple-checkboxes-with-formencode.html以及之前的問題Pylons FormEncode,其中包含一系列表單元素,但我仍然有一些問題。 我的結構目前如下:
架構:
from formencode import Schema, validators, ForEach, NestedVariables
class AddressSchema(Schema):
allow_extra_fields = False
addresses = validators.String(not_empty=True)
class JobSchema(Schema):
filter_extra_fields = True
allow_extra_fields = True
pre_validators = [NestedVariables()]
job_name = validators.MinLength(5, not_empty=True)
comments = validators.MinLength(5, not_empty=False)
addresses = ForEach(AddressSchema())
模板:
${renderer.errorlist("addresses")}
${renderer.errorlist("job_name")}
<p><label for="job_name">Job name: </label>${renderer.text("job_name", size=30)}</p>
% for a in range(1, initial_number_of_address_fields):
<p><label for="addresses-${a}">Address: </label>${renderer.textarea("addresses-" + str(a), cols=39, rows=6)}</p>
% endfor
${renderer.submit("submit", "Submit")}
視圖:
@view_config(route_name='add_addresses', renderer="add_addresses.mak")
def add_addresses(request):
from myproject.forms import JobSchema
from myproject.models import Job
from formencode import htmlfill, variabledecode, ForEach
initial_number_of_address_fields = 5
form = Form(request, schema=JobSchema(), variable_decode=False)
renderer = FormRenderer(form)
# if the form has been submitted
if 'submit' in request.POST:
if form.validate(): # uses validation specified in forms.py
# automatically bind to provided form
obj = form.bind(Job()) # no exisiting id provided, so a new document is created
# add some additional values
obj.__setattr__("last_updated_on", datetime.date.today().strftime('%Y/%m/%d'))
#save
obj.save()
return HTTPFound(location="/")
return {
'title':'Add addresses',
'initial_number_of_address_fields': initial_number_of_address_fields,
'renderer': renderer
}
我得到了實際驗證錯誤,如下所示:
{'addresses': u'Missing value'}
但正確填寫的值也會出錯:
輸入必須是類似dict的(不是:u'dgfgfd')
如果我將variable_decode
更改為True
(在表單變量設置中),我根本不會再收到任何錯誤。 我想我應該以某種方式使用variable_decode
,但我不確定如何。 如何正確驗證這些值?
我在2009年撰寫了一篇類似用法的博文,它可能會派上用場:
http://www.domenkozar.com/2009/07/22/advanced-formencode-usage/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.