Skip to Content
Menu
This question has been flagged
12 Replies
18737 Views

Please I have two fields with float datatype, how do I validate these two fields to prompt a user to enter a value different from default value 0.00?

Thanks

Avatar
Discard
Best Answer

Hi,

if you are working with new api, you may try this:

@api.one
@api.constrains('field1', 'field2')
def _check_values(self):
if self.field1 == 0.0 or self.field2 == 0.0:
raise Warning(_('Values should not be zero.'))
Avatar
Discard
Best Answer

You have to write a create function on that object. There are loads of examples on the web. You just have to write a create function then check if those values are different from zero. If they are you call the create of the super. If they are zero you can create a osv error.

Avatar
Discard
Author

Please can you give me an example?

def create(self, cr, uid, vals, context=None):

    if(vals.get('field1'))==0:
    raise osv.except_osv(_('Warning'), _('Value must be different from zero'))
else:
    return super(module_name, self).create(cr, uid, vals, context)

It's a generic way to do it. But basically it's what you need.

Author

Thank you very much!

If it helped you please mark the answer as correct to help others.

Author

Please where do I mark it as correct answer?

Below your question there is a section that now says "1 answer". There is a tick circle below a number and that number is to vote for the answer. You have to do it on all your questions answered because this helps to many people to find quickly answers. If the answer is correct you have to check it, if other answer helped you, you have to vote for it.

Hi Grover Menacho, I also want to know how to validate float data type time field. For example in the validation code float(time) it accepts the format only xx:yy and not accept other format time for example 100:00 pl given me sample code based on this. Thanks

I don't want to do it in create function. That validates when we save the entire form and that is a custom validation done by us. We need a way to have automatic validation just like the validation for the mandatory fields (Char, date) when they are empty. But integer and float have default value of 0. Because of that, the validation of mandatory field is not applied. Its not fair

Best Answer

If you are using class models.Model not osv.osv, try this :

@api.onchange('your_float_field1','your_float_field2')
def change_value(self):
if self.your_float_field1 == 0 or self.your_float_field2 == 0 :
return {'warning':{'title':'Error!','message':'your message'}}


Avatar
Discard