Задаване на стойността по подразбиране на поле на база данни на друго поле в 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, така че ако искате да покажете полето във формуляр за актуализиране, ще трябва изрично да посочите полетата, които да се показват във формуляра, или временно да зададете „изчисляване“ на полето атрибут на None.

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