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
-~----------~----~----~----~------~----~------~--~---

Reply via email to