It does not seem easy to read and I'm not sure I can help without rewriting 
your code.
However,  in your function...
    def get_help_id(name):
        result = None
        if len(name) > 5:
            try:
                result = int(name[5:])
            except:
                return result
        return result 

it seems that you will be passing integers to that function (as strings).  
However,  only strs more than 5 chrs long will be converted to an int.  I 
feel sure that this is not what you want to do.  Please double check it.



On Thursday, 24 September 2020 at 07:37:44 UTC+1 Константин Комков wrote:

> I spent a lot of time for understanding that cases when we can use SQLFORM 
> or SQLFORM.factory() 1 or 2 in 100.
>
> [image: 1.png]
>
> [image: 2.png]
>
> [image: 3.png]
>
> [image: 4.png]
> I have table in database for report and on picture I show differ between 
> what I need and what can supply SQLFORM. I know that we can exclude 
> unnecessary fields and change labels in SQLFORM, but I don't know how to 
> combine helps type with status and cloned it 18 times.
> All code if you want:
> @auth.requires_login()
> def egisso_load():
>     def get_help_id(name):
>         result = None
>         if len(name) > 5:
>             try:
>                 result = int(name[5:])
>             except:
>                 return result
>         return result
>
>
>     helps_statuses = db().select(db.s_helps_statuses.id, db.
> s_helps_statuses.name,
>                                  cache=(cache.ram, 3600), cacheable=True)
>     helps_types = db(db.s_helps_types.active == 1).select(
>         db.s_helps_types.id, db.s_helps_types.name, orderby=db.
> s_helps_types.id, cache=(cache.ram, 3600),
>         cacheable=True)
>     years = [OPTION(request.now.year, _value=request.now.year),
>              OPTION(request.now.year - 1, _value=request.now.year - 1)]
>     message = ''
>
>     form = FORM(DIV(DIV(LABEL('Год:', _for='year'),
>
>                         SELECT(*years, _name='year', _id='year', _class=
> 'form-control',
>                                requires=IS_INT_IN_RANGE(request.now.year - 
> 1, request.now.year + 1,
>                                                         error_message="Year 
> isn't correct!"),
>
>                                **{'_v-model': 'year'}, **{"'v-test'": 
> "test"}),
>
>                         _class='col-sm-12 col-md-4 col-lg-3'),
>
>                     DIV(LABEL('Месяц:', _for='month'),
>                         SELECT(
>                             OPTION('Январь', _value=1),
>                             OPTION('Февраль', _value=2),
>                             OPTION('Март', _value=3),
>                             OPTION('Апрель', _value=4),
>                             OPTION('Май', _value=5),
>                             OPTION('Июнь', _value=6),
>                             OPTION('Июль', _value=7),
>                             OPTION('Август', _value=8),
>                             OPTION('Сентябрь', _value=9),
>                             OPTION('Октябрь', _value=10),
>                             OPTION('Ноябрь', _value=11),
>                             OPTION('Декабрь', _value=12),
>                             requires=IS_INT_IN_RANGE(1, 13, 
> error_message='Указан 
> некорректный месяц!'),
>                             _name='month', _id='month', _class=
> 'form-control'),
>
>                         _class='col-sm-12 col-md-4 col-lg-3'),
>
>                     _class='form-group row'),
>                 DIV(DIV(P('Виды выплат:', _class='lead mb-0'), _class=
> 'col'), _class='form-group row'),
>                 DIV(DIV(INPUT(_type='checkbox', _name='chb', _id='chb', 
> **{'_v-model': 'chb'},
>                               _class='form-check-input'),
>                        LABEL('Отметить всё как загруженное:', _for='chb', 
> _class='form-check-label'),
>                        _class='form-check'), _class='form-group'))
>
>
>     helps_statuses_list = list()
>     for row in helps_statuses:
>         helps_statuses_list.append(OPTION(row.name, _value=row.id))
>     helps_statuses_list.insert(0, OPTION(''))
>     columns_list = list()
>     for row in helps_types:
>         columns_list.append(DIV(LABEL(row.name, _for=f'help_{row.id}'),
>                             SELECT(*helps_statuses_list, _id=f'help_{
> row.id}',
>                                    _name=f'help_{row.id}', _class=
> 'form-control',
>                                    requires=IS_IN_DB(db, '
> s_helps_statuses.id',
>                                                      error_message='Выберите 
> значение!')),
>                             _class='col-sm-12 col-md-4 col-lg-3 pb-3'))
>     form.append(DIV(*columns_list, _class='form-group row', _id=
> 'helps_type_row'))
>     form.append(DIV(DIV(INPUT(_type='submit', _class='btn btn-dark w-100'
> ), _class='col-sm col-md-4 col-lg-3'),
>                     _class='form-group row'))
>     if form.process().accepted:
>         for x in form.vars:
>             if x not in ('year', 'month', 'chb'):
>                 help_id = get_help_id(x)
>                 if help_id is not None:
>                     db.a_egisso_and_divisions.update_or_insert(
>                         (db.a_egisso_and_divisions.division == auth.user.
> division) &
>                         (db.a_egisso_and_divisions.year == form.vars.year) 
> &
>                         (db.a_egisso_and_divisions.month == form.vars.
> month) &
>                         (db.a_egisso_and_divisions.helps_type == help_id),
>                         division=auth.user.division, helps_type=help_id, 
> year=form.vars.year,
>                         month=form.vars.month, status=form.vars[x])
>                 else:
>                     message = f'Из ключа {x} не может быть извлечено 
> значение идентификатора!'
>     return dict(form=form, message=message)
>
>
>
>

-- 
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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/b7a757cc-0604-4fc2-99c5-5d4fc1d2de6bn%40googlegroups.com.

Reply via email to