1
请考虑我是web2py中的新手。接受POST和GET的搜索屏幕
我有一个控制器的这个功能来搜索公司的条目。我们的目标是在数据库从一种形式三个参数搜索,但我希望函数接受GET以及参数:
@auth.requires_login()
def index():
from datetime import datetime
data['subtitle'] = 'My Screen'
form = SQLFORM.factory(
Field('company',
type="reference company",
label='Company',
widget=SQLFORM.widgets.options.widget,
requires=IS_IN_DB(mongodb, mongodb.company.id, '%(name)s')
),
Field('initial_date',
label='Initial Date',
type="date",
requires=IS_NULL_OR(IS_DATE(format='%d/%m/%Y'))
),
Field('final_date',
label='Final Date',
type="date",
requires=IS_NULL_OR(IS_DATE(format='%d/%m/%Y'))
)
)
if str(request.env.request_method) == 'POST':
print request.post_vars
if form.accepts(request.post_vars, keepvalues = True):
params = {}
if form.vars.company is not None:
params['company'] = form.vars.company
if form.vars.initial_date is not None:
params['initial_date'] = form.vars.initial_date
if form.vars.final_date is not None:
params['final_date'] = form.vars.final_date
print 'Params: '
print params
redirect(URL('index', vars=params))
else:
for f in form.errors:
print f + ': ' + form.errors[f]
lista = {}
else:
query = None
if request.get_vars.company is not None:
query = mongodb.entry.company == request.get_vars.company
if request.get_vars.initial_date is not None:
query &= mongodb.entry.date >= datetime.strptime(request.get_vars.initial_date, '%Y-%m-%d')
if request.get_vars.final_date is not None:
query &= mongodb.entry.date <= datetime.strptime(request.get_vars.final_date, '%Y-%m-%d')
print 'Query: '
print query
if query is not None:
list = mongodb(query).select()
else:
list = {}
data['form'] = form
data['list'] = list
return dict(data=data)
完全只有当我提供该公司的作品。如果我在日期之间搜索,即使日期在数据库中匹配,也不会显示结果。
Web2py缺乏很好的例子。有人可以帮忙吗?
不错的解决方案。事实上,我不知道可以像这样定义一个表单。关于查询对象,这个想法刚开始时有一些价值,可以在下面使用。我会在明天早上测试,然后我会接受它。 – 2014-09-11 03:39:34
使用基于SQL的适配器,'None&='会生成一个异常。使用MongoDB,它不会产生异常,但显然这个查询并不会起作用。所以,只要确保'query'不是'None',当它到达第一个'&='时。 – Anthony 2014-09-11 13:15:49