On Jun 25, 3:50 am, Andrew Buchan <[email protected]> wrote: > Yarko, > > I tried doing this with a DIV, but if I put the whole form within the DIV,
I meant submitting the first form, and doing a LOAD() in another part of the page conditionally, based on some submit value of the first form (instead of directing to another page). I haven't done this, but it _should_ be straightforward. I do understand the "running out of time" piece. - Yarko > that doesn't seem to work. If you mean just putting the input fields in the > DIV, with the submit button outside of that, then that's what my original > question was about: how to generate a table with labels/inputs by passing a > list of Fields. Or did you mean a different way, I'm all ears :-) > As long as I can use form.accepts to validate just those fields which are > displayed, then it should work for me. > Having said that, I'm past my deadline and struggling for time, and this is > really a nice to have which I can't afford to spend too much time on before > launching. But still, all suggestions are most welcome... > > On Fri, Jun 25, 2010 at 9:37 AM, Yarko Tymciurak < > > [email protected]> wrote: > > On Jun 25, 3:24 am, Andrew Buchan <[email protected]> wrote: > > > Sorry for delay in getting back. I eventually opted for a solution which > > > does not involve JQuery, instead a department-specific list of fields is > > > passed to SQLForm, which makes things so much simpler. > > > The only draw back is that the user has to select a department on one > > page, > > > and is then redirected to another page with the 'create' form, but that's > > a > > > small price to pay for the simplicity of using self-submitting forms > > > If that's how you are doing it, then it would be a very small step to > > make that "other page" > > an ajax loaded css element on the first page - i.e. first part of > > form submitted gets > > the second part of the page loaded. > > > > thereafter (after creating the initial record, 5 other actions can be > > taken > > > on it, and for all of those the department is already known, so it's > > > easier). > > > Anyway, thanks for the suggestions, and I now know a bit about JQuery > > which > > > will no doubt come in useful one day. > > > Regards, > > > > On Tue, Jun 22, 2010 at 5:15 PM, mdipierro <[email protected]> > > wrote: > > > > This is no longer a client issue. I think you do handle the problem > > > > correctly client side. > > > > The problem is that if some fields exist in db but you do not want to > > > > insert them you need to change the validator from > > > > > db.table.field.requires=blabla() > > > > > into > > > > > db.table.field.requires=IS_EMPTY_OR(blabla()) > > > > > You can do this conditionally: > > > > > if request.vars.selectorfield='whatever': > > > > db.table.field.requires=IS_EMPTY_OR(blabla()) > > > > > On Jun 22, 9:56 am, Andrew Buchan <[email protected]> wrote: > > > > > Hi Massimo, > > > > > > I posted the code below before checking if the form would actually > > > > submit. > > > > > What now happens is that all the fields are put through validation, > > > > > including those which I hid with JQuery, and needless to say, most of > > > > them > > > > > fail because they're empty! > > > > > > There's no way I can do away with the validators, and I'm struggling > > to > > > > > find-out how to make it not validate those fields I hid. If I can't > > then > > > > > I've just thrown away a crucial 5 hours on JQuery, nice learning > > > > experience > > > > > but if I have to start again with a different approach I won't be a > > happy > > > > > bunny and neither will my client :-| > > > > > > Any suggestions? > > > > > > On Tue, Jun 22, 2010 at 2:27 PM, Andrew Buchan <[email protected]> > > > > wrote: > > > > > > Massimo, > > > > > > > Thanks for that, I was about to reply saying that JQuery can't do > > what > > > > I > > > > > > want it to, then thought I'd test my statement before making it. > > Here's > > > > the > > > > > > code for anyone who's interested: > > > > > > > Its all in the controller, as I pretty much use only one single > > > > > > multi-purpose view for all my pages :-) > > > > > > > #### > > > > > > > #Fields to be visible for all departments > > > > > > commonFields = [ > > > > > > 'Details', > > > > > > 'Suggested_Action' > > > > > > ] > > > > > > form = SQLFORM.factory(db[TableName]) > > > > > > > #Create dict of department-specific fields, this is where you > > make > > > > > > changes when departments change the fields they require.... > > > > > > #Note: must all exist in table def in model, exclude common > > fields > > > > in > > > > > > list above. > > > > > > DepartmentFields = dict() > > > > > > DepartmentFields['IT'] = ['Contract_Number', 'Details'] > > > > > > DepartmentFields['Projects'] = ['Work_Order_Number', > > > > > > 'Sales_Order_Number', 'Client'] > > > > > > > #Create javascript/JQuery string for department select's > > onChange > > > > > > event... > > > > > > deptchange = "$(\"TR[id^=no_table]\").hide();" +\ > > > > > > "var selectedDept = $('#To_Department :selected').text();" > > +\ > > > > > > "var fieldsToShow = [];" +\ > > > > > > "switch(selectedDept){" > > > > > > for dept, fields in DepartmentFields.items(): > > > > > > fields.extend(commonFields ) > > > > > > deptchange += "case '%s': fieldsToShow=%s;break;" % (dept, > > > > fields ) > > > > > > deptchange += "default: fieldsToShow=[];};for (f in > > > > > > fieldsToShow){$('#no_table_' + fieldsToShow[f] + > > '__row').show();};" > > > > > > > #Create the department select html control and insert at the > > top of > > > > the > > > > > > form (place this wrong and you will get very strange results when > > > > hiding > > > > > > parts of the form) > > > > > > DepartmentsRows = db(db.department.id >0 ).select() > > > > > > Departments = [DepartmentsRows[i]['department_name'] for i in > > > > > > range(len(DepartmentsRows))] > > > > > > form[0].insert(0, TR(TD('To Department: '),TD( > > > > > > SELECT( Departments , _name='To_Department', > > > > > > _id='To_Department', _onChange=deptchange ), > > > > > > ))) > > > > > > > I agree it's not ideal storing part of the logic in python, and > > part in > > > > > > JQuery, but at least this way the dict representing the variable > > data > > > > can be > > > > > > kept in python (we do this for the DAL so why not...). > > > > > > > I would still like to know the answer to me first question though: > > can > > > > I > > > > > > create INPUT/SELECT/TEXTAREA bits directly from the table > > definition > > > > field > > > > > > without going via SQLFORM? Anyone? > > > > > > > ------------------- > > > > > > > On Mon, Jun 21, 2010 at 5:35 PM, mdipierro < > > [email protected] > > > > >wrote: > > > > > > >> This is what I would do > > > > > > >> - make a single for that contains all fields you need > > > > > >> - use jQuery in the view so that depending on the selected > > department > > > > > >> some fields are hidden > > > > > > >> On Jun 21, 3:38 am, Andrew Buchan <[email protected]> wrote: > > > > > >> > Hello, > > > > > > >> > I am trying to make a form for inserting a new record > > representing > > > > an > > > > > >> > internal complaint against a given department. Depending on > > which > > > > > >> department > > > > > >> > is selected, different fields must be completed. > > > > > >> > The way I'm planning on doing this is with a simple form with a > > > > select > > > > > >> box > > > > > >> > for the department, a DIV, and a submit button. On changing the > > > > > >> department > > > > > >> > selection, the DIV will be refreshed to display only those > > fields > > > > > >> applicable > > > > > >> > to that department (all of which correspond to a field in the > > DAL). > > > > > > >> > 1. Where I'm having trouble is in generating the HTML fields > > based > > > > on > > > > > >> the > > > > > >> > names of a field in the DAL. I have previously always just used > > > > SQLForm > > > > > >> and > > > > > >> > sized it down to suit by passing a list of fields, but think > > that in > > > > > >> this > > > > > >> > situation, and many others, it would be useful to build a form > > from > > > > > >> fields > > > > > >> > obtained by passing the name of a field in the DAL and getting > > the > > > > > >> > validators brought through automatically. > > > > > > >> > 2. Also, if I manage to do this, will there be an issue with the > > > > fact > > > > > >> that > > > > > >> > some of the fields in the form are nested in a DIV, will the > > fields > > > > > >> still > > > > > >> > auto-validate? From recollection placing a whole form within a > > DIV > > > > > >> doesn't > > > > > >> > work so didn't want to do that... > > > > > > >> > Cheers..

