'list:string' are definitely RDBMS-anti-pattern: try to count  users that 
checked A-answer to B-question  from B-section from C-survey and `you`ll 
see your problems multiplied`(c). 
If 'list:string' seems suitable then you don't need RDBMS at all, you would 
better use pickle or json or another simpler solution

On Friday, October 18, 2019 at 9:10:15 PM UTC+3, NGNZONE wrote:
>
> I tried to implement your sugggested model in my db.py file, and wrote the 
> views, but the challenge I found was that it simple create a series of 
> dropdown fields from the references we created in the question table. this 
> still takes me back to the original challenge. 
> What I tried was:
> db.define_table('answer',
>                 Field('question',db.question),
>                 Field('choices', 'list:string'),
>                 Field('score', 'list:integer'),
>                 )
> This gives me an opportunity to enter a series of options, but all are 
> store in a single row. So the  challenge is how do I get the choices that 
> appear in the check-boxes as labels correspond to the respective scores. 
> Note that I do not need to pre-populate the table with choices, since the 
> choices will be made by the users taking the survey. 
> So I need to design the form in a way that the survey manager can add 
> question with different choices  and or number of choices , as well as 
> scores. and when a user selects a particular choice, the selected button 
> should send the corresponding value to a variable that I can further 
> process.
> Each Question has completely different types of choices, some have yes or 
> no, some have five choices, some three and so on, same with the score is 
> not having a consistent pattern, some questions have score 0, 5,10,15,20, 
> others 10,20, 50 and so on.
> As seen on the screenshot, if the user at the front end click on the 
> checkbox Always availble, the corresponding score of 10 should be added to 
> the sub_total variable.
> If another user clicks on Not Available 5 should be added to the sub_total 
> and so on.
> Summarily, the checkbox labels are to be directly connected to the score 
> and both will be defined during survey creation.
> Regards
>
> On Saturday, October 12, 2019 at 9:03:32 PM UTC+1, Val K wrote:
>>
>> # db_0.py
>> # shortcut for `not null` field creation
>> def req_field(*args, **kwargs):
>>     kwargs['notnull'] = True
>>     kwargs['required'] = True
>>     return Field(*args, **kwargs)
>>
>> # shortcut for reference field creation, `notnull` by default
>> def FK(ref_table, **kwargs):
>>     if 'notnull' not in kwargs:
>>         kwargs['notnull'] = True
>>         kwargs['required'] = True
>>     return Field(ref_table, 'reference %s' % ref_table, **kwargs)
>>
>> # SURVEY MODEL:
>> #-------------------[ SURVEY ]-------------------
>> t_name = 'survey'
>> db.define_table(t_name,
>>     req_field('name',  'string'),
>> )
>> #-------------------[ QUESTION ]-------------------
>> t_name = 'question'
>> db.define_table(t_name,
>>     req_field('content',  'string'),
>> )
>> #-------------------[ ANSWER ]-------------------
>> t_name = 'answer'
>> db.define_table(t_name,
>>     req_field('content',  'string'),
>> )
>> #-------------------[ SECTION ]-------------------
>> t_name = 'section'
>> db.define_table(t_name,
>>     req_field('name',  'string'),
>> )
>> #-------------------[ SURVEY_QUESTION ]-------------------
>> t_name = 'survey_question'
>> db.define_table(t_name,
>>     FK('survey'),
>>     FK('section'),
>>     FK('question'),
>> )
>> __UNIQUE_INDEXES__[t_name] = ['survey', 'section', 'question'] # or maybe 
>> just ['survey', 'question']?
>>
>> #-------------------[ SURVEY_QUESTION_ANSWER ]-------------------
>> t_name = 'survey_question_answer'
>> db.define_table(t_name,
>>     FK('survey_question'),
>>     FK('answer'),
>>     req_field('score', 'integer', default = 0),
>> )
>> __UNIQUE_INDEXES__[t_name] = ['survey_question', 'answer']
>>
>>
>> # RESULTS MODEL :
>> #-------------------[ SURVEY_USER_RESULT ]-------------------
>> # if record exists then `user` check `answer` to `question` from `survey`
>> t_name = 'survey_user_result'
>> db.define_table(t_name,
>>     FK('survey_question_answer'),
>>     FK('auth_user'),
>> )
>> __UNIQUE_INDEXES__[t_name] = ['survey_question_answer', 'auth_user']
>>
>> # assuming SQLite
>> def __create_indexes__():
>>     def make_uniq(tbl, cols):
>>         sql_str = \
>>             'CREATE UNIQUE INDEX IF NOT EXISTS %(index_name)s ON 
>> %(table_name)s ( %(col_names)s );' \
>>              % dict( index_name = idx_name,
>>                      table_name = tbl,
>>                      col_names = ','.join(["'%s'"%_ for _ in cols])
>>                )
>>         db.executesql(sql_str)
>>     def create_indexes():
>>         for t in __UNIQUE_INDEXES__:
>>             args = __UNIQUE_INDEXES__[t]
>>             if isinstance(args[0], basestring): # single index
>>                 args = [args]
>>             for a in args:
>>                 make_uniq(t, list(a))
>>     create_indexes()
>>
>> # to create indexes uncomment line below, it is required to be run only 
>> once 
>> #__create_indexes__()  # after index creation you can comment this line 
>> again
>>
>> # !!! if indexes or tablenames/fields will be changed (even order of 
>> fields in __UNIQUE_INDEXES__[tbl])
>> #     you should somehow drop old-existing indexes first (there are dozen 
>> utils for SQLite) 
>>
>>
>>
>> On Saturday, October 12, 2019 at 7:54:05 PM UTC+3, NGNZONE wrote:
>>>
>>> Situation Description
>>>
>>> First things first, I am not a very experience web2py developer but I 
>>> have learned the basics of the framework, so please pardon me if my 
>>> questions are not so constructive. I started working on a survey 
>>> application which will enable users to create multiple choice questions. A 
>>> question will have a number of choices, and when the user selects a 
>>> particular choice, a corresponding score will be added to a sub total. That 
>>> is if the survey is about Fruits for instance, if a user selects oranges, 5 
>>> will be added to the sub total for that section, if another user selects 
>>> Mangoes, 10 will be added to the sub total and so on. The attached 
>>> screenshot survey_layout will better explain what I am talking about. It 
>>> has three columns, the first column is the question, the second, the 
>>> corresponding choices and the third column the score linked to each choice. 
>>> [Survey layout][1] There are six sections in the survey, and each section 
>>> has a sub_total which is generated from the score value of each choice the 
>>> user chooses on each of the questions. Finally the sub_totals will be added 
>>> up to give a grand total for the entire survey and it can then be 
>>> interpreted. What I have done so far is as seen on the follow screenshots
>>>
>>>
>>>
>>> Questions:
>>>
>>> 1.How do I create my models in such a way that the user can dynamically 
>>> create questions for the survey for each section on the page and when the 
>>> user takes the survey, each choice the user selects, will correspond to a 
>>> score value which can be tracked and summed up to give the section totals?
>>>
>>> 2.How will my form be defined to output all the questions for each 
>>> section one after the other on the screen? I have tried using SQLFORMS but 
>>> don't know exactly how to achieve this.
>>>
>>>    1. Thinking of using pagination to separate the sections so the page 
>>>    will not be too long. any better option?
>>>
>>> References: I have watched the web2py survey by MASSIMO DI PIERRO where 
>>> I learn how to do what I have done so far.
>>>
>>> Thanks in advance
>>>
>>>

-- 
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/4d916ba6-4569-4d0c-b4cc-78ba1da9f762%40googlegroups.com.

Reply via email to