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>