Установка по умолчанию для поля базы данных значения другого поля в web2py

db.define_table('mytable',
    Field('start_number', 'double', requires=IS_NOT_EMPTY()),
    Field('current_number', 'double', default=mytable.start_number, requires=IS_NOT_EMPTY()))

Когда что-то происходит на веб-сайте, current_number можно изменить на что-то другое, но оно всегда будет начинаться со значения по умолчанию start_number (т. е. при создании записи). Каждая запись имеет разные start_number.

Я продолжаю получать сообщение об ошибке, говорящее, что mytable не может быть найдено, вероятно, потому, что оно еще не было полностью определено. Можно ли по-прежнему установить значение по умолчанию для current_number на start_number?


person Bak    schedule 29.04.2013    source источник


Ответы (1)


Если вставки всегда будут выполняться с помощью отправки форм, вы можете сделать:

Field('current_number', 'double', default=request.post_vars.start_number, ...)

Другой вариант — сделать его вычисляемым полем:

Field('current_number', 'double', compute=lambda r: r.start_number, ...)

Однако по умолчанию вычисляемые поля не отображаются в формах, созданных с помощью SQLFORM, поэтому, если вы хотите отобразить поле в форме обновления, вам придется явно указать поля для отображения в форме или временно установить «вычисление» поля. атрибут Нет.

person Anthony    schedule 29.04.2013
comment
Я пробовал это так: pastebin.com/FQxvZrs1, но это не сработало. Использование default= не определяет поле при INSERT, а COMPUTE= также переопределяет его при INSERT, чего я предпочитаю не делать. - person Andrew; 10.07.2016
comment
Не уверен, что вы спрашиваете - возможно, откройте новый вопрос и объясните, чего вы пытаетесь достичь. - person Anthony; 11.07.2016
comment
Энтони, ваш ответ здесь был полезен groups.google.com/d/msg/web2py /vMe41spAnCY/CaBeXt3OBgAJ - person Andrew; 11.07.2016