def field_rountrip_result(self, field, value, expected): model = 'website.converter.test' Model = self.registry(model) id = Model.create(self.cr, self.uid, {field: value}) [record] = Model.browse(self.cr, self.uid, [id]) e = etree.Element('span') field_value = 'record.%s' % field e.set('t-field', field_value) rendered = self.registry('website.qweb').render_tag_field( e, {'field': field_value}, '', ir_qweb.QWebContext(self.cr, self.uid, { 'record': record, }, context={'inherit_branding': True})) element = html.fromstring(rendered, parser=html.HTMLParser(encoding='utf-8')) converter = self.registry('website.qweb').get_converter_for( element.get('data-oe-type')) value_back = converter.from_html(self.cr, self.uid, model, Model._fields[field], element) if isinstance(expected, str): expected = expected.decode('utf-8') self.assertEqual(value_back, expected)
def test_m2o(self): """ the M2O field conversion (from html) is markedly different from others as it directly writes into the m2o and returns nothing at all. """ model = 'website.converter.test' field = 'many2one' Sub = self.registry('website.converter.test.sub') sub_id = Sub.create(self.cr, self.uid, {'name': "Foo"}) sub2_id = Sub.create(self.cr, self.uid, {'name': "Bar"}) Model = self.registry(model) id = Model.create(self.cr, self.uid, {field: sub_id}) [record] = Model.browse(self.cr, self.uid, [id]) e = etree.Element('span') field_value = 'record.%s' % field e.set('t-field', field_value) rendered = self.registry('website.qweb').render_tag_field( e, {'field': field_value}, '', ir_qweb.QWebContext(self.cr, self.uid, { 'record': record, }, context={'inherit_branding': True})) element = html.fromstring(rendered, parser=html.HTMLParser(encoding='utf-8')) # emulate edition element.set('data-oe-many2one-id', str(sub2_id)) element.text = "New content" converter = self.registry('website.qweb').get_converter_for( element.get('data-oe-type')) value_back = converter.from_html(self.cr, self.uid, model, Model._fields[field], element) self.assertIsNone( value_back, "the m2o converter should return None to avoid spurious" " or useless writes on the parent record") self.assertEqual( Sub.browse(self.cr, self.uid, sub_id).name, "Foo", "element edition can't change directly the m2o record") self.assertEqual( Model.browse(self.cr, self.uid, id).many2one.name, "Bar", "element edition should have been change the m2o id")
def convert(self, obj, dest): converter = self.registry('ir.qweb.field.monetary') options = {'widget': 'monetary', 'display_currency': 'c2'} converted = converter.to_html( self.cr, self.uid, 'value', obj, options, doc.createElement('span'), { 'field': 'obj.value', 'field-options': json.dumps(options) }, '', ir_qweb.QWebContext(self.cr, self.uid, { 'obj': obj, 'c2': dest, })) return converted
def context(self, values): return ir_qweb.QWebContext(self.cr, self.uid, values)
def context(self, values): return ir_qweb.QWebContext(self.cr, self.uid, values, context={'inherit_branding': True})