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