2014-01-30 3 views
0

Я использую 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 я набор там.

Должен ли я снова называть форму на странице редактирования? Я чувствую, что это избыточно.

ответ

0

Чтобы предотвратить включение полей в формы редактирования, установите для атрибутов readable и writable значение False. Если вы установили writable в False, но оставьте readable как True, тогда вы увидите значение для чтения только для поля в форме.

+0

Я сделал удобочитаемым и читаемым = 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

+0

OH MY # * $ * # !!!! Ответ заключается в том, что я использую «writeable», как свое правописание, а не «записываемый»! Я не понимаю, почему ошибка не возникает, если я все время неправильно ее переписываю. Большое спасибо за ваш ответ, Энтони! – user3211229

+0

Извините, я не заметил орфографическую ошибку. Я думаю, что оба являются допустимыми написаниями на английском языке, но web2py выбрал «записываемый». Исключение не возникает, потому что в Python вы можете добавлять произвольные атрибуты к объекту (если это специально не запрещено). Возможно, мы должны сделать исключение в конкретном случае «writeable», поскольку это распространенная ошибка. – Anthony

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