The Contact Form module is not installing from a stock odoo installation I am running on my server. It seems to be failing with this line:
Element '<xpath expr="//div[@name='mail_button']">' cannot be located in parent view
Any help would be appreciated in getting this thing installed. The blog module (which requires this module) seems to have been partially installed despite this error, which led to some errors in the blogging module.
The full error log is shown here:
Traceback (most recent call last): File "/opt/odoo/odoo/http.py", line 640, in _handle_exception return super(JsonRequest, self)._handle_exception(exception) File "/opt/odoo/odoo/http.py", line 677, in dispatch result = self._call_function(**self.params) File "/opt/odoo/odoo/http.py", line 333, in _call_function return checked_call(self.db, *args, **kwargs) File "/opt/odoo/odoo/service/model.py", line 101, in wrapper return f(dbname, *args, **kwargs) File "/opt/odoo/odoo/http.py", line 326, in checked_call result = self.endpoint(*a, **kw) File "/opt/odoo/odoo/http.py", line 935, in __call__ return self.method(*args, **kw) File "/opt/odoo/odoo/http.py", line 506, in response_wrap response = f(*args, **kw) File "/opt/odoo/addons/web/controllers/main.py", line 889, in call_button action = self._call_kw(model, method, args, {}) File "/opt/odoo/addons/web/controllers/main.py", line 877, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "/opt/odoo/odoo/api.py", line 689, in call_kw return call_kw_multi(method, model, args, kwargs) File "/opt/odoo/odoo/api.py", line 680, in call_kw_multi result = method(recs, *args, **kwargs) File "/opt/odoo/odoo/addons/base/module/module.py", line 411, in button_immediate_install return self._button_immediate_function(type(self).button_install) File "/opt/odoo/odoo/addons/base/module/module.py", line 485, in _button_immediate_function modules.registry.Registry.new(self._cr.dbname, update_module=True) File "/opt/odoo/odoo/modules/registry.py", line 82, in new odoo.modules.load_modules(registry._db, force_demo, status, update_module) File "/opt/odoo/odoo/modules/loading.py", line 339, in load_modules loaded_modules, update_module) File "/opt/odoo/odoo/modules/loading.py", line 237, in load_marked_modules loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks) File "/opt/odoo/odoo/modules/loading.py", line 156, in load_module_graph _load_data(cr, module_name, idref, mode, kind='data') File "/opt/odoo/odoo/modules/loading.py", line 95, in _load_data tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report) File "/opt/odoo/odoo/tools/convert.py", line 845, in convert_file convert_xml_import(cr, module, fp, idref, mode, noupdate, report) File "/opt/odoo/odoo/tools/convert.py", line 915, in convert_xml_import obj.parse(doc.getroot(), mode=mode) File "/opt/odoo/odoo/tools/convert.py", line 799, in parse self._tags[rec.tag](rec, de, mode=mode) File "/opt/odoo/odoo/tools/convert.py", line 777, in _tag_template return self._tag_record(record, data_node) File "/opt/odoo/odoo/tools/convert.py", line 707, in _tag_record id = self.env(context=rec_context)['ir.model.data']._update(rec_model, self.module, res, rec_id or False, not self.isnoupdate(data_node), noupdate=self.isnoupdate(data_node), mode=self.mode) File "/opt/odoo/odoo/addons/base/ir/ir_model.py", line 1229, in _update record = record.create(values) File "/opt/odoo/odoo/addons/base/ir/ir_ui_view.py", line 362, in create return super(View, self).create(self._compute_defaults(values)) File "/opt/odoo/odoo/models.py", line 3834, in create self._fields[key].determine_inverse(record) File "/opt/odoo/odoo/fields.py", line 1041, in determine_inverse getattr(records, self.inverse)() File "/opt/odoo/odoo/addons/base/ir/ir_ui_view.py", line 220, in _inverse_arch view.write(data) File "/opt/odoo/odoo/addons/base/ir/ir_ui_view.py", line 380, in write return super(View, self).write(self._compute_defaults(vals)) File "/opt/odoo/odoo/models.py", line 3560, in write self._write(old_vals) File "/opt/odoo/odoo/models.py", line 3711, in _write self._validate_fields(vals) File "/opt/odoo/odoo/models.py", line 1083, in _validate_fields raise ValidationError("%s\n\n%s" % (_("Error while validating constraint"), tools.ustr(e))) ParseError: "Error while validating constraint Element '<xpath expr="//div[@name='mail_button']">' cannot be located in parent view Error context: View `Contact Form` [view_id: 1173, xml_id: n/a, model: n/a, parent_id: 239] None" while parsing None:3, near <data name="Contact Form" inherit_id="website.contactus" customize_show="True"> <xpath expr="//div[@name='mail_button']" position="replace"> <div> <form action="/website/form/" method="post" data-model_name="crm.lead" data-success_page="/page/website_crm.contactus_thanks" class="s_website_form form-horizontal container-fluid mt32" enctype="multipart/form-data"> <div class="form-group form-field o_website_form_required_custom"> <label class="col-md-3 col-sm-4 control-label" for="contact_name">Your Name</label> <div class="col-md-7 col-sm-8"> <input type="text" class="form-control o_website_form_input" name="contact_name" t-att-value="request.params.get('contact_name', '')" required=""/> </div> </div> <div class="form-group form-field"> <label class="col-md-3 col-sm-4 control-label" for="phone">Phone Number</label> <div class="col-md-7 col-sm-8"> <input type="text" class="form-control o_website_form_input" name="phone" t-att-value="request.params.get('phone', '')"/> </div> </div> <div class="form-group form-field o_website_form_required_custom"> <label class="col-md-3 col-sm-4 control-label" for="email_from">Email</label> <div class="col-md-7 col-sm-8"> <input type="text" class="form-control o_website_form_input" name="email_from" required="" t-att-value="request.params.get('email_from', '')"/> </div> </div> <div class="form-group form-field o_website_form_required_custom"> <label class="col-md-3 col-sm-4 control-label" for="partner_name">Your Company</label> <div class="col-md-7 col-sm-8"> <input type="text" class="form-control o_website_form_input" name="partner_name" required="" t-att-value="request.params.get('partner_name', '')"/> </div> </div> <div class="form-group form-field o_website_form_required"> <label class="col-md-3 col-sm-4 control-label" for="name">Subject</label> <div class="col-md-7 col-sm-8"> <input type="text" class="form-control o_website_form_input" name="name" required="" t-att-value="request.params.get('name', '')"/> </div> </div> <div class="form-group form-field o_website_form_required_custom"> <label class="col-md-3 col-sm-4 control-label" for="description">Your Question</label> <div class="col-md-7 col-sm-8"> <textarea class="form-control o_website_form_input" name="description" required=""><t t-esc="request.params.get('description', '')"/></textarea> </div> </div> <div class="form-group"> <div class="col-md-offset-3 col-sm-offset-4 col-sm-8 col-md-7"> <span class="btn btn-primary btn-lg o_website_form_send">Send</span> <span id="o_website_form_result"/> </div> </div> </form> </div> </xpath> </data>