Come to think Anthony, the best way to do it will be similar to this. Having hidden field and tables and once selected the user_type, all the other fields or tables shows up.
https://stackoverflow.com/questions/17380476/web2py-authenticating-two-types-of-profile But the implementation is wrong. hidden_fields = (user_extra_fields if request.args(1) == 'tutor') request.args(1) will never get satisfied like that. Need to process the table and then set the argument. I am thinking...but I could be wrong. On Monday, February 1, 2016 at 4:27:46 PM UTC-5, Ron Chatterjee wrote: > > Yes Anthony. Thank you again! It works just like you explained. > > On Monday, February 1, 2016 at 3:53:30 PM UTC-5, Anthony wrote: >> >> Calling .process will already do an insert into the db.Education table -- >> your code is inserting an additional record. Instead, *before* calling >> .process, set db.Education.education_of.default = auth.user_id. Also, the >> education_of field should not be readable or writable. >> >> Anthony >> >> On Monday, February 1, 2016 at 3:47:54 PM UTC-5, Ron Chatterjee wrote: >>> >>> Thanks for the help Anthony. I appreciate that. >>> >>> For some reason this below don't work: >>> >>> form = auth(); >>> form2 = SQLFORM(db.Education).process() >>> if form2.accepted: >>> db.Education.insert(education_of = auth.user.id) >>> return dict(form=form, form2 = form2) >>> >>> >>> Or even if I do this: >>> db.Education.update_or_insert(education_of = auth.user.id) #basically >>> updating the education with the auth.user.id (it shows up as None) >>> >>> But strange enough, if I insert the Education.education_of from the >>> table itself (from the admin), it works just fine. >>> >>> >>> >>> >>> >>> On Monday, February 1, 2016 at 1:58:41 PM UTC-5, Anthony wrote: >>>> >>>> I just meant you won't be able to use the built-in auth.profile() >>>> functionality -- your example is custom code. >>>> >>>> Anthony >>>> >>>> On Monday, February 1, 2016 at 1:33:54 PM UTC-5, Ron Chatterjee wrote: >>>>> >>>>> Thank you Anthony, >>>>> >>>>> Very good discussion. Just one question regarding when you say we >>>>> "have to create own register/profile"... >>>>> >>>>> Let's say my model is: >>>>> >>>>> >>>>> #---------------------------------------------------------------------------------------------- >>>>> db.define_table("Education", >>>>> Field("education_of", 'reference auth_user', >>>>> widget=SQLFORM.widgets.options.widget, requires= IS_EMPTY_OR(IS_IN_DB(db, >>>>> db.auth_user.id))), >>>>> Field("Title", "string", label='Education Title', >>>>> requires=IS_NOT_EMPTY(),default=None)) >>>>> >>>>> #---------------------------------------------------------------------------------------------- >>>>> controller: >>>>> >>>>> form = auth(); >>>>> form2 = SQLFORM(db.Education).process() >>>>> if form2.accepted: >>>>> db.Education.education_of.default = db.auth_user.id >>>>> return dict(form=form, form2 = form2) >>>>> >>>>> >>>>> #------------------------------------------------------------------------------------------------------------------------- >>>>> >>>>> And in view we add the education as a folding or something: >>>>> >>>>> <div class="container"> >>>>> <button type="button" class="btn btn-info" data-toggle="collapse" >>>>> data-target="#demo">Add Education</button> >>>>> <div id="demo" class="collapse">{{=form2}}</div> >>>>> </div> >>>>> >>>>> >>>>> We can make the education_of as readable = False. So, it gets >>>>> updated/inserted as auth_user.id >>>>> >>>>> Do I still need to code up profile separately? We can add other >>>>> tables the same way. No? >>>>> >>>>> >>>>> On Monday, February 1, 2016 at 12:25:43 PM UTC-5, Anthony wrote: >>>>>> >>>>>> If there aren't too many fields, it might just be easiest to put them >>>>>> all in auth_user and just make some conditionally readable/writable >>>>>> depending on the type of user. Otherwise, you could create separate >>>>>> profile >>>>>> tables and have them reference auth_user. In that case, you would have >>>>>> to >>>>>> create your own register/profile actions, as web2py Auth won't handle >>>>>> the >>>>>> separate tables for you. >>>>>> >>>>>> Finally, it might be possible for you to conditionally change the >>>>>> names of the Auth tables based on user type: >>>>>> http://web2py.com/books/default/chapter/29/09/access-control#Renaming-Auth-tables. >>>>>> >>>>>> However, you would have to be able to identify the user type *prior* >>>>>> to registration/login (e.g., based on some identifier in the URL), as >>>>>> the >>>>>> Auth table names must be determined in order to process any Auth actions. >>>>>> >>>>>> Anthony >>>>>> >>>>>> On Monday, February 1, 2016 at 12:30:04 AM UTC-5, [email protected] >>>>>> wrote: >>>>>>> >>>>>>> >>>>>>> Hello web2py community. I am a new user and I have to say, web2py >>>>>>> saves the day by saving so much time over a full stack framework which >>>>>>> requires so much work. Anyway, going to ask a question tothe community. >>>>>>> How >>>>>>> to custom create auth_user so instead of adding extra fields to the >>>>>>> auth_user we can have multiple tables for the profile with various >>>>>>> attributes. I am creating an application for gym membership and I need >>>>>>> to >>>>>>> have the user register based on their job, current address, prior >>>>>>> fitness >>>>>>> routines, current fitness routine, activities they are >>>>>>> interested...etc. >>>>>>> Put all in one tables with various fields seems make a table >>>>>>> disproportionately long. Would be nice to split them to different >>>>>>> tables >>>>>>> and user can pick and choose which tables they like to fill up or they >>>>>>> don't. >>>>>>> >>>>>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

