have an extra state besides readable/writable: submittable (in case of readable - true) -> field will be processed as hidden (and I assume validators are run on hidden as well?)
On Sun, Jun 14, 2009 at 11:35 PM, mdipierro<mdipie...@cs.depaul.edu> wrote: > > I did learn in this case, that's all I meant. ;-) > What is your suggestion? > > Massimo > > On Jun 14, 4:19 pm, Hans Donner <hans.don...@pobox.com> wrote: >> Hi Massimo, >> >> it's not about winning - I prefer learning... >> >> On Sun, Jun 14, 2009 at 11:14 PM, mdipierro<mdipie...@cs.depaul.edu> wrote: >> >> > OK. you win. >> >> > On Jun 14, 3:54 pm, Hans Donner <hans.don...@pobox.com> wrote: >> >> then how to recognise what value was submitted? >> >> >> On 14 jun, 22:53, mdipierro <mdipie...@cs.depaul.edu> wrote: >> >> >> > I would then just handle this manual in onvalidate, no need for the >> >> > hidden file. >> >> >> > On Jun 14, 5:51 am, Hans Donner <hans.don...@pobox.com> wrote: >> >> >> > > If I have multiple users running the same function, one of the users >> >> > > should get an error that the year he has been submitting is already >> >> > > existing and I do not want that what he inserts is the year following >> >> > > the one he has been submitting. >> >> > > (and I'm on GAE, so no uniquess checking there on db level) >> >> >> > > On Sun, Jun 14, 2009 at 12:41 PM, mdipierro<mdipie...@cs.depaul.edu> >> >> > > wrote: >> >> >> > > > I am pretty sure that if you omit this line: >> >> >> > > > form.append(INPUT(_type='hidden', _value=newyear, _name >> >> > > > ='newyear')) >> >> >> > > > the field still goes in db because of "default" thus no need for >> >> > > > validation. >> >> >> > > > Massimo >> >> >> > > > On Jun 14, 2:26 am, Hans Donner <hans.don...@pobox.com> wrote: >> >> > > >> I think there is, but currently I've came up with: >> >> >> > > >> def year(): >> >> > > >> # too many - fail >> >> > > >> if len(request.args) > 1: >> >> > > >> redirect(URL(r=request,args=[])) >> >> >> > > >> # init >> >> > > >> table = db.year_year >> >> > > >> app_settings = AppSettings() >> >> > > >> arg0 = None >> >> > > >> if len(request.args) == 1: >> >> > > >> arg0 = request.args[0] >> >> >> > > >> if arg0 == 'add': >> >> >> > > >> def update_settings(form): >> >> > > >> requested = form.request_vars.newyear >> >> > > >> if not app_settings['min_year']: >> >> > > >> requested = form.vars.year >> >> > > >> app_settings['min_year'] = requested >> >> > > >> app_settings['max_year'] = requested >> >> > > >> app_settings.commit() >> >> >> > > >> def onvalidate_addyear(form): >> >> > > >> if app_settings['max_year']: >> >> > > >> next = str(int(app_settings['max_year']) + 1) >> >> > > >> requested = form.request_vars.newyear >> >> > > >> if next and requested != next: >> >> > > >> if requested <= next: >> >> > > >> session.flash = \ >> >> > > >> "The year %s has already been added" % >> >> > > >> requested >> >> > > >> else: >> >> > > >> session.flash = \ >> >> > > >> "The year %s does not follow %s" % >> >> > > >> (requested, next) >> >> > > >> redirect(URL(r=request, args=['add'])) >> >> > > >> form.vars.year = requested >> >> >> > > >> default = dict( >> >> > > >> table = table, >> >> > > >> onaccept = update_settings, >> >> > > >> onvalidation = onvalidate_addyear >> >> > > >> ) >> >> >> > > >> if app_settings['min_year'] == None: >> >> > > >> # no years yet - need to add first >> >> > > >> form = crud.create(**default) >> >> > > >> return dict(form = form) >> >> > > >> else: >> >> > > >> newyear = int(app_settings['max_year']) + 1 >> >> > > >> table.year.writeable = False >> >> > > >> table.year.default = newyear >> >> > > >> form = crud.create(**default) >> >> > > >> # add field to hold value for input >> >> > > >> form.append(INPUT(_type='hidden', _value=newyear, >> >> > > >> _name = >> >> > > >> 'newyear')) >> >> > > >> return dict(form = form) >> >> >> > > >> # no add >> >> > > >> rows = db().select(table.ALL) >> >> > > >> all_years = extract_field(rows, 'year') >> >> >> > > >> if arg0 and int(arg0) and \ >> >> > > >> arg0 >= app_settings['min_year'] and arg0 <= >> >> > > >> app_settings['max_year']: >> >> > > >> form = crud.read(table, rows[all_years.index(arg0)]) >> >> > > >> return dict(form = form) >> >> > > >> elif arg0: >> >> > > >> redirect(URL(r=request,args=[])) >> >> >> > > >> return dict(app = app_settings.row, years = all_years) >> >> >> > > >> On Sun, Jun 14, 2009 at 2:16 AM, >> >> > > >> mdipierro<mdipie...@cs.depaul.edu> wrote: >> >> >> > > >> > can you post an example? I am sure there is a better way. >> >> >> > > >> > Massimo >> >> >> > > >> > On Jun 13, 3:28 pm, Hans Donner <hans.don...@pobox.com> wrote: >> >> > > >> >> the model has some more fields, entered by the user. This filed >> >> > > >> >> is >> >> > > >> >> prepopulated by the server. >> >> > > >> >> On submitting the prepopluated value may be not valid any more, >> >> > > >> >> but >> >> > > >> >> may not be updated by the server >> >> > > >> >> (is considered part of the user submitted fileds). >> >> >> > > >> >> Currently worked around it by adding a hidden field with the >> >> > > >> >> data and >> >> > > >> >> supplying an onvalidation. >> >> >> > > >> >> On Sat, Jun 13, 2009 at 6:31 PM, >> >> > > >> >> mdipierro<mdipie...@cs.depaul.edu> wrote: >> >> >> > > >> >> > I do not understand. If the fields are marked readonly (as in >> >> > > >> >> > db.table.field.readonly=True) the field is not submitted from >> >> > > >> >> > the >> >> > > >> >> > client to the server with the form. The form is populated >> >> > > >> >> > serverside. >> >> >> > > >> >> > Massimo >> >> >> > > >> >> > On Jun 13, 10:38 am, Hans Donner <hans.don...@pobox.com> >> >> > > >> >> > wrote: >> >> > > >> >> >> Well, depends what you call 'inserted by the visitor'. In >> >> > > >> >> >> this case >> >> > > >> >> >> I'm prepopulating the form, some fields are not editable, >> >> > > >> >> >> but the user >> >> > > >> >> >> should submit these values as well. >> >> > > >> >> >> Guess I have to use onvalidate then to make sure all is ok. >> >> >> > > >> >> >> The second remark in my original posting: the 'unique' >> >> > > >> >> >> should somehow >> >> > > >> >> >> be supported by DAL, or warnings should be submitted that it >> >> > > >> >> >> is >> >> > > >> >> >> unsupported. >> >> >> > > >> >> >> On Sat, Jun 13, 2009 at 4:39 PM, >> >> > > >> >> >> mdipierro<mdipie...@cs.depaul.edu> wrote: >> >> >> > > >> >> >> > back to the original question. Should they validate? If >> >> > > >> >> >> > they are >> >> > > >> >> >> > readonly it means they are not inserted by the visitor. We >> >> > > >> >> >> > only >> >> > > >> >> >> > validate visitor provided input. >> >> >> > > >> >> >> > Massimo >> >> >> > > >> >> >> > On Jun 13, 9:02 am, Hans Donner <hans.don...@pobox.com> >> >> > > >> >> >> > wrote: >> >> > > >> >> >> >> sorry, should be db.table.field.default = '' >> >> >> > > >> >> >> >> On Sat, Jun 13, 2009 at 3:54 PM, >> >> > > >> >> >> >> mdipierro<mdipie...@cs.depaul.edu> wrote: >> >> >> > > >> >> >> >> > I am not what you mean by: >> >> >> > > >> >> >> >> > db.table.field = 'some invalid value for the requires[]' >> >> >> > > >> >> >> >> > It seems to be redefining the field. It should give an >> >> > > >> >> >> >> > error. >> >> >> > > >> >> >> >> > On Jun 13, 8:28 am, Hans Donner <hans.don...@pobox.com> >> >> > > >> >> >> >> > wrote: >> >> > > >> >> >> >> >> db.define_table( >> >> > > >> >> >> >> >> 'test', >> >> > > >> >> >> >> >> SQLField('unique', 'string', unique = True, >> >> > > >> >> >> >> >> requires = IS_NOT_IN_DB(db, 'test.unique')), >> >> > > >> >> >> >> >> ) >> >> >> > > >> >> >> >> >> def pseudo(): >> >> > > >> >> >> >> >> db.table.field.writable = False >> >> > > >> >> >> >> >> db.table.field = 'some invalid value for the >> >> > > >> >> >> >> >> requires[]' >> >> > > >> >> >> >> >> form = crud.create(db.table) >> >> >> > > >> >> >> >> >> the form doesn't run the validators for the >> >> > > >> >> >> >> >> non-writable field, and >> >> > > >> >> >> >> >> when you are on GAE the uniqueness is not enforced on >> >> > > >> >> >> >> >> db level (and >> >> > > >> >> >> >> >> DAL does not make up for this). >> >> >> > > >> >> >> >> >> When I have the following: >> >> > > >> >> >> >> >> def pseudo(): >> >> > > >> >> >> >> >> db.table.field = 'some invalid value for the >> >> > > >> >> >> >> >> requires[]' >> >> > > >> >> >> >> >> form = crud.create(db.table) >> >> > > >> >> >> >> >> form.custom.widget.jaar.update(**dict(_disabled = >> >> > > >> >> >> >> >> True)) >> >> >> > > >> >> >> >> >> the value is non-editable by the user, it is validated >> >> > > >> >> >> >> >> but the value is removed > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---