Reputation: 23
I'm on Odoo 14 and I wonder how can I get a warning message when some require fields are empty before saving.
This is what I try to do :
warning_message = {
'title': ('Attention!'),
'message': ('Certains champs requis sont vides, est tu sûr de vouloir sauvegarder?'),
}
@api.onsave
def onsave_check_fields(self):
for field in self.fields:
if field.require == True:
if field.value == empty:
if warning_message:
return save()
return save()
Upvotes: 0
Views: 513
Reputation: 1314
For Web-forms on your website (front office):
In your xml template (here : id="your_form_template_id") :
<t t-if="error" t-foreach="error.get('error_message', [])" t-as="err"><h4 class="text-danger" t-esc="err" /></t>
<form action="/process_form_inputs">
<input type="hidden" name="field_required" t-att-value="'phone,name'" />
<input type="hidden" name="submitted" value="1" />
<label for="name">Name</label><input type="text" name="name" value="" />
<label for="name">Email</label><input type="text" name="email" value="" />
<label for="name">Phone</label><input type="text" name="phone" value="" />
</form>
For Web-forms on your website (front office), the right place to check form inputs is not in your odoo-model file: your_(inherited)model/models/your_model.py. But in your odoo-controller file : your_(inherited)model/controller/main.py
@http.route(['/process_form_inputs'], type='http', methods=['GET', 'POST'], auth="public", website=True, sitemap=False)
def process_form(self, **kw):
# form input fields,values are sent in kw
# IF POSTED
if 'submitted' in kw:
partner_fields = request.env['res.partner']._fields
pre_values = { k: (bool(v) and int(v)) if k in partner_fields and partner_fields[k].type == 'many2one' else v for k, v in kw.items() }
errors, error_msg = self.onsave_check_fields(kw, pre_values)
if not errors:
# YOUR CODE TO CREATE OR UPDATE THE MODEL-record : Partner.create(values) or Partner.browse(id).write(values)
return request.redirect('/success_page')
else:
errors['error_message'] = error_msg
values = kw
render_values={'form_values': values,'error': errors,}
return request.render("your_module.your_form_template_id", render_values)
def onsave_check_fields(self, all_form_values, data):
error = dict()
error_message = []
# Required fields from form
required_fields = [f for f in (all_form_values.get('field_required') or '').split(',') if f]
# error message for empty required fields
for field_name in required_fields:
if not data.get(field_name):
error[field_name] = 'missing'
return error, error_message
Upvotes: 1