This is not the right syntax for decimal. Should be Field('f_total_sum_all', type='decimal(5,10)', label=T('Total Sum')),
decimal(precision,scale) same syntax as SQL. On 26 joulu 2010, 23:16, Kenneth Lundström <kenneth.t.lundst...@gmail.com> wrote: > Aapche 2, wsgi, MySQL 5.0, web2py 1.91.4, python 2.6.5 > > I have defined in my model: > Field('f_total_sum_all', type='decimal', > label=T('Total Sum')), > > Even floeat gives the same error. Only integer works. > > Version > web2py Version 1.91.4 (2010-12-22 17:31:23) > Python Python 2.6.5: /usr/bin/python > > Traceback (most recent call last): > File "/web2py/gluon/restricted.py", line 188, in restricted > exec ccode in environment > File "/web2py/applications/kenneths/models/db_wizard.py", line 70, in > <module> > migrate=settings.migrate) > File "/web2py/gluon/dal.py", line 3321, in define_table > polymodel=polymodel) > File "/web2py/gluon/dal.py", line 444, in create_table > precision, scale = [int(x) for x in field.type[8:-1].split(',')] > ValueError: invalid literal for int() with base 10: '' > > Error snapshot help Detailed traceback description > > <type 'exceptions.ValueError'>(invalid literal for int() with base 10: '') > > inspect attributes > Exception instance attributes > __setattr__ <method-wrapper '__setattr__' of exceptions.ValueError object> > __reduce_ex__ <built-in method __reduce_ex__ of exceptions.ValueError > object> > __getslice__ <method-wrapper '__getslice__' of exceptions.ValueError object> > __getitem__ <method-wrapper '__getitem__' of exceptions.ValueError object> > __setstate__ <built-in method __setstate__ of exceptions.ValueError object> > __getattribute__ <method-wrapper '__getattribute__' of > exceptions.ValueError object> > __str__ <method-wrapper '__str__' of exceptions.ValueError object> > args ("invalid literal for int() with base 10: ''",) > __reduce__ <built-in method __reduce__ of exceptions.ValueError object> > __format__ <built-in method __format__ of exceptions.ValueError object> > __class__ <type 'exceptions.ValueError'> > __dict__ {} > __delattr__ <method-wrapper '__delattr__' of exceptions.ValueError object> > __subclasshook__ <built-in method __subclasshook__ of type object> > __repr__ <method-wrapper '__repr__' of exceptions.ValueError object> > __init__ <method-wrapper '__init__' of exceptions.ValueError object> > __hash__ <method-wrapper '__hash__' of exceptions.ValueError object> > __sizeof__ <built-in method __sizeof__ of exceptions.ValueError object> > __doc__ 'Inappropriate argument value (of correct type).' > __unicode__ <built-in method __unicode__ of exceptions.ValueError object> > __new__ <built-in method __new__ of type object> > Frames > > File /web2py/gluon/restricted.py in restricted at line 188 code > arguments variables > Function argument list > > (code="### we prepend t_ to tablenames and f_ to > fieldn...Field('current_record','reference t_bill_item'))\n", > environment={'A': <class 'gluon.html.A'>, 'Auth': <class > 'gluon.tools.Auth'>, 'B': <class 'gluon.html.B'>, 'BEAUTIFY': <class > 'gluon.html.BEAUTIFY'>, 'BODY': <class 'gluon.html.BODY'>, 'BR': <class > 'gluon.html.BR'>, 'CENTER': <class 'gluon.html.CENTER'>, 'CLEANUP': > <class 'gluon.validators.CLEANUP'>, 'CODE': <class 'gluon.html.CODE'>, > 'CRYPT': <class 'gluon.validators.CRYPT'>, ...}, > layer='/web2py/applications/kenneths/models/db_wizard.py') > Code listing > > if type(code) == types.CodeType: > ccode = code > else: > ccode = compile2(code,layer) > > exec ccode in environment > > except HTTP: > raise > except Exception: > # XXX Show exception in Wing IDE if running in debugger > > Variables > environment {'A': <class 'gluon.html.A'>, 'Auth': <class > 'gluon.tools.Auth'>, 'B': <class 'gluon.html.B'>, 'BEAUTIFY': <class > 'gluon.html.BEAUTIFY'>, 'BODY': <class 'gluon.html.BODY'>, 'BR': <class > 'gluon.html.BR'>, 'CENTER': <class 'gluon.html.CENTER'>, 'CLEANUP': > <class 'gluon.validators.CLEANUP'>, 'CODE': <class 'gluon.html.CODE'>, > 'CRYPT': <class 'gluon.validators.CRYPT'>, ...} > ccode <code object <module> at 0x2aaab001f6c0, file > "/...plications/kenneths/models/db_wizard.py", line 5> > * > > File /web2py/applications/kenneths/models/db_wizard.py in <module> at > line 70 code arguments variables > Function argument list > > () > Code listing > > label=T('Created By'),writable=False,readable=False), > Field('modified_by',db.auth_user,default=auth.user_id, > label=T('Modified By'),writable=False,readable=False, > update=auth.user_id), > format='%(f_name)s', > migrate=settings.migrate) > > db.define_table('t_receipt_archive',db.t_receipt,Field('current_record','re > ference > t_receipt')) > > ######################################## > > Variables > migrate undefined > settings.migrate True > settings <Storage {'layout_theme': 'Clicker', 'subtitle':...l_server': > 'localhost', 'login_method': 'local'}> > * > > File /web2py/gluon/dal.py in define_table at line 3321 code arguments > variables > Function argument list > > (self=<DAL {'auth_permission': <Table {'ALL': <gluon.d...ab0014c90>}>, > '_migrate': True, '_pool_size': 0}>, tablename='t_receipt', > *fields=(<gluon.dal.Field object>, <gluon.dal.Field object>, > <gluon.dal.Field object>, <gluon.dal.Field object>, <gluon.dal.Field > object>, <gluon.dal.Field object>, <gluon.dal.Field object>, > <gluon.dal.Field object>, <gluon.dal.Field object>, <gluon.dal.Field > object>, <gluon.dal.Field object>, <gluon.dal.Field object>), > **args={'format': '%(f_name)s', 'migrate': True}) > Code listing > > if migrate or self._uri=='gae': > try: > sql_locker.acquire() > self._adapter.create_table(t,migrate=migrate, > fake_migrate=fake_migrate, > polymodel=polymodel) > > finally: > sql_locker.release() > else: > t._dbt = None > > Variables > polymodel None > * > > File /web2py/gluon/dal.py in create_table at line 444 code arguments > variables > Function argument list > > (self=<gluon.dal.MySQLAdapter object>, table=<Table {'to_be_paid': > <gluon.dal.Field object at...by': <gluon.dal.Field object at > 0x2aaab0039690>}>, migrate=True, fake_migrate=False, polymodel=None) > Code listing > > foreign_key=referenced + ('(%s)' % table._db[referenced].fields[0]), > on_delete_action=field.ondelete) > elif field.type.startswith('list:reference'): > ftype = self.types[field.type[:14]] > elif field.type.startswith('decimal'): > precision, scale = [int(x) for x in field.type[8:-1].split(',')] > > ftype = self.types[field.type[:7]] % \ > dict(precision=precision,scale=scale) > elif not field.type in self.types: > raise SyntaxError, 'Field: unknown field type: %s for %s' % \ > > Variables > scale undefined > field.type 'decimal' > precision undefined > field <gluon.dal.Field object> > x '' > builtinint <type 'int'> > ].split <built-in method split of str object> > > Context > > locals request session response > locals > TFK : > {} > constraint_name : > 't_receipt_f_purchased_by__constraint' > fake_migrate : > False > field : > <gluon.dal.Field object> > fields : > ['id INT AUTO_INCREMENT NOT NULL', 'f_name VARCHAR(255)', > 'f_purchased_by INT, INDEX f_purchased_by__idx (f...ed_by) REFERENCES > auth_user(id) ON DELETE CASCADE', 'f_purchased DATETIME', 'f_paid > DATETIME', 'to_be_paid CHAR(1)'] > ftype : > 'CHAR(1)' > k : > 'f_total_sum_all' > migrate : > True > not_null : > "NOT NULL DEFAULT 'F'" > polymodel : > None > referenced : > 'auth_user' > self : > <gluon.dal.MySQLAdapter object> > sql_fields : > {'f_name': 'VARCHAR(255)', 'f_paid': 'DATETIME', 'f_purchased': > 'DATETIME', 'f_purchased_by': 'INT, INDEX f_purchased_by__idx > (f_purchased_by),...ed_by) REFERENCES auth_user(id) ON DELETE CASCADE', > 'id': 'INT AUTO_INCREMENT NOT NULL', 'to_be_paid': 'CHAR(1)'} > sql_fields_aux : > {'f_name': 'VARCHAR(255)', 'f_paid': 'DATETIME', 'f_purchased': > 'DATETIME', 'f_purchased_by': 'INT, INDEX f_purchased_by__idx > (f_purchased_by),...ed_by) REFERENCES auth_user(id) ON DELETE CASCADE', > 'id': 'INT AUTO_INCREMENT NOT NULL', 'to_be_paid': 'CHAR(1)'} > table : > <Table {'to_be_paid': <gluon.dal.Field object at...by': <gluon.dal.Field > object at 0x2aaab0039690>}> > tablename : > 't_receipt' > x : > '' > request > ajax : > False > application : > 'kenneths' > args : > [] > body : > <cStringIO.StringO object> > cid : > None > controller : > 'default' > cookies : > <SimpleCookie: > __utma='14303153.1210700238.12899...-a86975c4-95eb-4143-8375-3c535bfedb04'> > env : > <Storage {'mod_wsgi_listener_host': '', 'script_...s/web2py/', > 'mod_wsgi_process_group': 'web2pys'}> > extension : > 'html' > folder : > '/web2py/applications/kenneths/' > function : > 'receipt_create' > get_vars : > <Storage {}> > now : > datetime.datetime(2010, 12, 27, 7, 27, 11, 841782) > post_vars : > <Storage {}> > raw_args : > None > url : > <gluon.html.XML object> > vars : > <Storage {}> > wsgi : > <Storage {'start_response': <function <lambda> a...PATH_INFO': > '/kenneths/default/receipt_create'}}> > session > auth : > <Storage {'expiration': 3600, 'last_visit': date...c17a9c95', > 'registration_key': None, 'id': 1L}>}> > flash : > None > response > body : > <cStringIO.StringO object> > cookies : > <SimpleCookie: session_id_kenneths='a307b89f-4f94-4789-a21e-c5505aa678ac'> > files : > [] > flash : > '' > headers : > <Storage {'Expires': 'Mon, 27 Dec 2010 05:27:11 ...he, must-revalidate, > post-check=0, pre-check=0'}> > menu : > [] > meta : > <Storage {}> > postprocessing : > [] > session_file : > <open file > '/web2py/applications/ke...307b89f-4f94-4789-a21e-c5505aa678ac', mode 'rb+'> > session_filename : > '/web2py/applications/kenneths/sessi...-a307b89f-4f94-4789-a21e-c5505aa678a c' > session_id : > '81.17.193.228-a307b89f-4f94-4789-a21e-c5505aa678ac' > session_id_name : > 'session_id_kenneths' > status : > 200 > view : > 'default/receipt_create.html' > In file: /web2py/applications/kenneths/models/db_wizard.py > > ######################################## > db.define_table('t_receipt', > Field('id','id', > represent=lambda id:SPAN(id,' > ',A('view',_href=URL('receipt_read',args=id)))), > Field('f_name', type='string', > label=T('Name')), > # Field('f_submitted', type='datetime', > # label=T('Submitted')), > Field('f_purchased_by', type='reference auth_user',default=auth.user_id, > label=T('Purchased By')), > Field('f_purchased', type='datetime', > label=T('Purchased')), > Field('f_paid', type='datetime', > label=T('Paid')), > Field('to_be_paid','boolean',default=False, > label=T('To be paid')), > # Field('f_total_sum', type='decimal', > # label=T('Total Sum')), > Field('f_total_sum_all', type='decimal', > label=T('Total Sum')), > Field('active','boolean',default=True, > label=T('Active'),writable=False,readable=False), > Field('created_on','datetime',default=request.now, > label=T('Created On'),writable=False,readable=False),... > > lisää »