Hi Massimo
Yes.
I included the relevant lines in my first post (with writable=False
attribute).
The point was to make an added username field selectively writeable at
the form processing level. I spelt 'writable' incorrectly in one of my
lines. Everything is working fine now.
The username field is required for upcoming enhancements to a web site
with added e-commerce facilities such as an item quantity editable
cart, an order history and a payment history as an account. The key to
getting e-commerce facilities with this level of sophistication
working without headaches is well thought out database table design
and a good framework. Web2py is an excellent framework and has great
database tools, such as database table migration and inbuilt database
administration.
Here is what I am currently using for the username field.
model file before auth.define_tables():
db.Field('username', length=32, label="User Name",
writable=False,),
table.username.requires = [IS_LENGTH(minsize=3,
error_message="Three or more characters required"), IS_ALPHANUMERIC(),
IS_NOT_IN_DB(db, table.username)]
controller file:
def user():
if request.args and request.args[0] in ('register', 'login'):
auth.settings.table_user.username.writable=True
return dict(form=auth())
John Heenan
On Sep 17, 12:07 pm, mdipierro <[email protected]> wrote:
> no, but there is a retrieve_username.
>
> Mind that web2py knows how to handle a field called username. Have you
> tried just the following?
>
> ...
> Field('username', length=32, label="User Name")
> ...
> db.auth_user.username.requires = [IS_LENGTH(minsize=3,
> error_message="Three or more characters required"), IS_NOT_IN_DB(db,
> table.username)]
>
> def user(): return dict(form=auth())
>
> On Sep 16, 7:18 pm, John Heenan <[email protected]> wrote:
>
> > I have fixed my own problem. I had a spelling mistake; 'writable' does
> > not have an extra e in it!
>
> > Upon fixing the problem I needed to make a slight adjustment to the
> > code to make it work properly. If there are no arguments to the user
> > function then a redirection to user/login (even if logged in already)
> > occurs so the code still works.
>
> > Here is the adjustment:
>
> > def user():
> > if request.args and request.args[0] in ('register', 'login'):
> > auth.settings.table_user.username.writable=True
> > return dict(form=auth())
>
> > Now I wonder if there an easy way to also include the username field
> > for user/retrieve_password ?
>
> > John Heenan
>
> > On Sep 16, 5:09 pm, John Heenan <[email protected]> wrote:
>
> > > I want to make an added username field of a custom auth_user table
> > > writeable with registration.
>
> > > This is how the custom non writeable field is defined:
> > > db.Field('username', length=32, label="User Name",
> > > writable=False,),
>
> > > The require attribute is added externally:
> > > table.username.requires = [IS_LENGTH(minsize=3,
> > > error_message="Three or more characters required"), IS_NOT_IN_DB(db,
> > > table.username)]
>
> > > This is how I alter the alter writeable attribute for registration
>
> > > def user():
> > > if request.args and request.args[0]=='register':
> > > auth.settings.table_user.username.writeable=True
> > > return dict(form=auth())
>
> > > The field does not change to a writeable one in the registration
> > > action.
>
> > > I don't know what else I need to do to make the field writeable.
>
> > > John Heenan
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---