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.