Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Estate Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
    • Meet an advisor
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Get a demo
  • Pricing
  • Help

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Accounting
  • Inventory
  • PoS
  • Project
  • MRP
All apps
You need to be registered to interact with the community.
All Posts People Badges
Tags (View all)
odoo accounting v14 pos v15
About this forum
You need to be registered to interact with the community.
All Posts People Badges
Tags (View all)
odoo accounting v14 pos v15
About this forum
Help

How to check the size of a field

Subscribe

Get notified when there's activity on this post

This question has been flagged
fieldscharactersodooV8
5 Replies
15840 Views
Avatar
Uillino

I know that the tag 'size' sets the maximum size of values stored for a field.

For example, in such way:

 name_of_field =  fields.Char('name of field', size=2)

I could write a maximum of two characters for 'name_of_field': one or two characters are allowed.

How can I prevent to write only one character?


-----------------------------------

This is the right xml file:

<field name="scode" on_change="on_change_length_id(scode)"/> 

and this is the right .py file:

# -*- encoding: utf-8 -*-
from openerp import models, fields
from openerp.osv import osv

class myclass(models.Model):
_name = 'tbl
_description = 'Write into db'

scode= fields.Char('Code', size=3 required=True)

def get_lenght(self, cr, uid, ids, scode, context=None):
if scode and len(scode) != 3:
My_error_Msg = 'Wrong size'
raise osv.except_osv(("Warning!"), (My_error_Msg))
return

else:
return scode


def on_change_length_id(self, cr, uid, ids, scode, context=None):
res = {'value': {'scode': self.get_lenght(cr, uid, ids, scode, context=context)}}
return res

0
Avatar
Discard
Avatar
Rihene
Best Answer

 Here is the solution:
Python:

from openerp import models, fields

from openerp.osv import osv

class myclass(models.Model):

_name = 'tbl'

_description = 'Insert into db'

scode = fields.Char('Code', size=3, required=True)

def get_lenght(self, cr, uid, ids, scode context=None):

if len(scode) == 3:

return True

else:

My_error_Msg = 'Size uncorrect'

raise osv.except_osv(_("Error!"), _(My_error_Msg))

return False

def on_change_length_id(self, cr, uid, ids, scode, context=None):

res = {'value': {'scode': self.get_lenght(cr, uid, ids, scode, context=context)

}

}

return res

And your XML:

<field name="scode" on_change="on_change_length_id(scode)"/>

Regards.

1
Avatar
Discard
Uillino
Author

I get this error: 2015-08-10 13:29:10,406 3867 ERROR MyModule werkzeug: Error on request: Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/Werkzeug-0.9-py2.7.egg/werkzeug/serving.py", line 174, in run_wsgi execute(self.server.app) File "/usr/lib/python2.7/site-packages/Werkzeug-0.9-py2.7.egg/werkzeug/serving.py", line 162, in execute application_iter = app(environ, start_response) File "/home/Odoo/openerp/openerp/service/server.py", line 281, in app return self.app(e, s) File "/home/Odoo/openerp/openerp/service/wsgi_server.py", line 216, in application return application_unproxied(environ, start_response) File "/home/Odoo/openerp/openerp/service/wsgi_server.py", line 202, in application_unproxied result = handler(environ, start_response) File "/home/Odoo/openerp/openerp/http.py", line 1280, in __call__ return self.dispatch(environ, start_response) File "/home/Odoo/openerp/openerp/http.py", line 1254, in __call__ return self.app(environ, start_wrapped) File "/usr/lib/python2.7/site-packages/Werkzeug-0.9-py2.7.egg/werkzeug/wsgi.py", line 574, in __call__ return self.app(environ, start_response) File "/home/Odoo/openerp/openerp/http.py", line 1412, in dispatch ir_http = request.registry['ir.http'] File "/home/Odoo/openerp/openerp/http.py", line 339, in registry return openerp.modules.registry.RegistryManager.get(self.db) if self.db else None File "/home/Odoo/openerp/openerp/modules/registry.py", line 335, in get update_module) File "/home/Odoo/openerp/openerp/modules/registry.py", line 366, in new openerp.modules.load_modules(registry._db, force_demo, status, update_module) File "/home/Odoo/openerp/openerp/modules/loading.py", line 351, in load_modules force, status, report, loaded_modules, update_module) File "/home/Odoo/openerp/openerp/modules/loading.py", line 255, in load_marked_modules loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks) File "/home/Odoo/openerp/openerp/modules/loading.py", line 176, in load_module_graph _load_data(cr, module_name, idref, mode, kind='data') File "/home/Odoo/openerp/openerp/modules/loading.py", line 118, in _load_data tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report) File "/home/Odoo/openerp/openerp/tools/convert.py", line 901, in convert_file convert_xml_import(cr, module, fp, idref, mode, noupdate, report) File "/home/Odoo/openerp/openerp/tools/convert.py", line 974, in convert_xml_import doc = etree.parse(xmlfile) File "lxml.etree.pyx", line 3197, in lxml.etree.parse (src/lxml/lxml.etree.c:64816) File "parser.pxi", line 1593, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:92943) File "parser.pxi", line 1624, in lxml.etree._parseFilelikeDocument (src/lxml/lxml.etree.c:93282) File "parser.pxi", line 1506, in lxml.etree._parseDocFromFilelike (src/lxml/lxml.etree.c:92145) File "parser.pxi", line 1069, in lxml.etree._BaseParser._parseDocFromFilelike (src/lxml/lxml.etree.c:89185) File "parser.pxi", line 577, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:84385) File "parser.pxi", line 676, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:85488) File "parser.pxi", line 616, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:84811) XMLSyntaxError: attributes construct error, line 11, column 17

Serpent Consulting Services Pvt. Ltd.

Share the XML file please.

Uillino
Author

There were few errors in your code. I've tryed in such way: from openerp.osv import osv scode = fields.Char('Code', size=3, required=True) def get_lenght(self, cr, uid, ids, scode, context=None): if len(scode) != 3: My_error_Msg = 'Size uncorrect' raise osv.except_osv(_("Error!"), _(My_error_Msg)) return False else: return True def on_change_length_id(self, cr, uid, ids, scode, context=None): res = {'value': {'scode': self.get_lenght(cr, uid, ids, scode, context=context) } } return res but I get this error: Traceback (most recent call last): File "/home/Odoo/openerp/openerp/http.py", line 530, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/home/Odoo/openerp/openerp/http.py", line 567, in dispatch result = self._call_function(**self.params) File "/home/Odoo/openerp/openerp/http.py", line 303, in _call_function return checked_call(self.db, *args, **kwargs) File "/home/Odoo/openerp/openerp/service/model.py", line 113, in wrapper return f(dbname, *args, **kwargs) File "/home/Odoo/openerp/openerp/http.py", line 300, in checked_call return self.endpoint(*a, **kw) File "/home/Odoo/openerp/openerp/http.py", line 796, in __call__ return self.method(*args, **kw) File "/home/Odoo/openerp/openerp/http.py", line 396, in response_wrap response = f(*args, **kw) File "/home/Odoo/openerp/openerp/addons/web/controllers/main.py", line 949, in call_kw return self._call_kw(model, method, args, kwargs) File "/home/Odoo/openerp/openerp/addons/web/controllers/main.py", line 941, in _call_kw return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs) File "/home/Odoo/openerp/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/Odoo/openerp/openerp/api.py", line 363, in old_api result = method(recs, *args, **kwargs) File "/home/Odoo/openerp/openerp/models.py", line 5786, in onchange record._onchange_eval(name, field_onchange[name], result) File "/home/Odoo/openerp/openerp/models.py", line 5720, in _onchange_eval method_res = getattr(self._model, method)(*args) File "/home/Odoo/openerp/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/Odoo/openerp/openerp/addons/mymodule/macro_sotto.py", line 32, in on_change_length_id res = {'value': {'scode': self.get_lenght(cr, uid, ids, scode_macro_attivita, context=context) File "/home/Odoo/openerp/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/home/Odoo/openerp/openerp/addons/mymodule/macro_sotto.py", line 23, in get_lenght if len(scode) != '3': TypeError: object of type 'bool' has no len()

Rihene

If it works for you friend CHECK it ;)

Uillino
Author

Thank you for your help, but I get the same error: TypeError: object of type 'bool' has no len()

Rihene

Try this one please

Uillino
Author

The error is the same: TypeError: object of type 'bool' has no len(). I don't understand why!

Uillino
Author

I've solved! The problem is that odoo set scode to True by default. So I need to put an 'if scode', Now I'm going to post the right code. Thank you for your help.

Avatar
Uillino
Author Best Answer

I get this error:

TypeError: object of type 'bool' has no len() 

using this code:

from openerp import models, fields
from openerp.osv import osv

class myclass(models.Model):
_name = 'tbl'
_description = 'Insert into db'

scode = fields.Char('Code', size=3, required=True)

def get_lenght(self, cr, uid, ids, scode context=None):
if len(scode == 3:
return True
else:
My_error_Msg = 'Size uncorrect'
raise osv.except_osv(_("Error!"), _(My_error_Msg))
return False

def on_change_length_id(self, cr, uid, ids, scode context=None):
res = {'value': {'scode': self.get_lenght(cr, uid, ids, scode context=context)
}
}
return res

and this xml file:

<field name="scode" on_change="on_change_length_id(scode)"/> 

Any idea?

Thanks!

0
Avatar
Discard
Enjoying the discussion? Don't just read, join in!

Create an account today to enjoy exclusive features and engage with our awesome community!

Sign up
Related Posts Replies Views Activity
display field by selected model.
fields odooV8
Avatar
0
Mar 16
4023
Retrieving the keys from the selection field
fields odooV8
Avatar
0
Dec 15
5172
What is use of oldname? Solved
fields openerp7 odooV8
Avatar
Avatar
Avatar
2
Aug 22
15121
How to let a field stay editable even after save or confirm
fields editable odooV8
Avatar
Avatar
1
Apr 19
5157
How to have more than one many2one field for a method?
fields many2one odooV8
Avatar
Avatar
1
Jun 18
4620
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now