Я использую SQLFORM.grid для своей формы. Вид показывает тонкие, и я могу скрыть поля. Но когда я перехожу на страницу «Редактировать», я хочу, чтобы определенные поля были нечитаемыми и не записываемыми. Я установил его для чтения = False перед вызовом SQLFORM.grid, а также в request.args == 'edit'. Я могу подтвердить, что он обнаруживает страницу редактирования, но по какой-то причине она не запускает чтение и запись.Web2py SQLFORM.grid Редактировать страницу
Ниже контроллер:
def display_form():
db.items.timeStamp.readable = False
db.items.imageName.readable = False
db.items.isCopied.writeable = True
query = (db.items.numSold > 100)
default_sort_order = [db.items.numSold]
if len(request.args) > 1 and ('edit' in request.args):
db.items.timeStamp.readable = False
db.items.imageName.writeable = False
form = SQLFORM.grid(query=query, orderby=default_sort_order, create=False,
deletable=False, editable=True, maxtextlength=64, paginate=25, csv=False,
user_signature=False,
links=[dict(header=T('Profit'),body=lambda row: row.profit),
dict(header=T('Image'), body = lambda rowB: A(IMG(_src=URL('static', "images/"+
rowB.imageName.replace('\\','/')), _width=50, _height=50),
_href=URL('static', "images/"+ rowB.imageName.replace('\\','/'))))],
selectable=get_chosenItems
)
else:
form = SQLFORM.grid(query=query, orderby=default_sort_order, create=False,
deletable=False, editable=True, maxtextlength=64, paginate=25, csv=False,
user_signature=False,
links=[dict(header=T('Profit'),body=lambda row: row.profit),
dict(header=T('Image'), body = lambda rowB: A(IMG(_src=URL('static', "images/"+
rowB.imageName.replace('\\','/')), _width=50, _height=50),
_href=URL('static', "images/"+ rowB.imageName.replace('\\','/'))))],
selectable=get_chosenItems
)
return dict(form=form)
я могу сказать, что, когда на странице редактирования, она будет идти в, если заявление, однако, она полностью игнорирует readables я набор там.
Должен ли я снова называть форму на странице редактирования? Я чувствую, что это избыточно.
Я сделал удобочитаемым и читаемым = False на определенных полях и разместил их после утверждения if. Он по-прежнему не работает: если len (request.args)> 1 и ('edit' в request.args): db.items.timeStamp.readable = False db.items.timeStamp.writeable = False db. items.imageName.readable = False db.items.imageName.writeable = False – user3211229
OH MY # * $ * # !!!! Ответ заключается в том, что я использую «writeable», как свое правописание, а не «записываемый»! Я не понимаю, почему ошибка не возникает, если я все время неправильно ее переписываю. Большое спасибо за ваш ответ, Энтони! – user3211229
Извините, я не заметил орфографическую ошибку. Я думаю, что оба являются допустимыми написаниями на английском языке, но web2py выбрал «записываемый». Исключение не возникает, потому что в Python вы можете добавлять произвольные атрибуты к объекту (если это специально не запрещено). Возможно, мы должны сделать исключение в конкретном случае «writeable», поскольку это распространенная ошибка. – Anthony