As you've discovered, random doesn't work in this context. Make an array of class attendee numbers and then allocate the class which has the fewest students.
On Thursday, 23 July 2020 12:50:00 UTC+1, mostwanted wrote: > > Well the whole concept behind this application was that allocation of > spaces in time, days & class rooms should be automatic, the user should > just select the lecturer, the subject & the period the subject takes > (Double session=2hrs, Single session=1hr) from there after the user submits > that information its allocated time, day & class room automatically. > > To determine the whole automatic process I used the random() method, the > problem with it is that after a while of entering details some random > determinants start to repeat & alot more than desired causing conflict & > triggering (conflict handling methods) in my validation function! > > With the above code I wanted to just keep up with the whole automatic > notion of it! > > On Thursday, July 23, 2020 at 1:12:17 PM UTC+2, villas wrote: >> >> Suggestion: >> Your idea of overriding the user's selections with random choices seems >> strange. >> Why not ask the user to specify a date and then show him which classes >> are available nearest that date/time? >> He can then choose one of those. >> >> >> On Wednesday, 22 July 2020 19:04:27 UTC+1, mostwanted wrote: >>> >>> After a form has failed to save because that information already exists >>> in the database I wanna try & alter the value that determines a day where >>> the info is saved in the db for the form to be saved in a different day >>> that does not contain similar form details currently attempting to be saved >>> and this should be done automatically without the engaging the user E.G: >>> >>> >>> def my_validator(form): >>> control=['1', '2', '3', '4' ,'5'] >>> form.vars.controller = random.choice(control) >>> if db((db.lecture.id == form.vars.id) & (d.controller==form.vars. >>> controller) & (db.lecture.lecture_time == form.vars.lecture_time)).count >>> () >0: >>> >>> if int(form.vars.controller) < int(control[4]): >>> int(form.vars.controller) +1 >>> response.flash=T('Saved in',' ', int(form.vars.controller) + >>> 1) >>> >>> if int(form.vars.controller) > int(control[4]): >>> int(form.vars.controller) -1 >>> repsonse.flash=T('Saved in',' ', int(form.vars.controller) - >>> 1) >>> >>> else: >>> form.errors.lecturer=SPAN("Record already exists in the whole >>> database", _style="font-weight: bold;") >>> >>> The above code doesnt work but its the concept thats in my head, where >>> can I fix it? >>> >>> >>> On Tuesday, July 21, 2020 at 12:16:29 PM UTC+2, villas wrote: >>>> >>>> Your my_validator function iterates through the whole table. This is >>>> OK when you have a few records, but very inefficient if you have >>>> thousands/millions. Why not simply query the table? Something like >>>> this... >>>> >>>> def my_validator(form): >>>> if db((db.lecture.id == form.vars.id) & (db.lecture.lecture_time >>>> == form.vars.lecture_time) >>>> ).count() >0: >>>> form.errors.lecturer=SPAN("Record already exists", >>>> _style="font-weight: >>>> bold;") >>>> >>>> -- 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 web2py+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/664fd0fb-3708-4c72-8b00-8f2f1df906fao%40googlegroups.com.