Odoo模板未在main_object中看到字段

时间:2019-04-15 07:16:24

标签: odoo odoo-9 qweb

我使用类'website.seo.metadata'扩展我的模型。

在添加的模型中提交的无索引

class service(models.Model):
    _name = 'pr_filials.service'
    _inherit = ['mail.thread', 'website.seo.metadata', 'website.published.mixin']

    name = fields.Char(string="Name", required=True)
    noindex = fields.Boolean(string="Noindex", default=False)
....

在模板中,我使用的是这样的视图:

<template id="assets_frontend_noindex" inherit_id="website.assets_frontend" name="Noindex">
            <xpath expr="." position="inside">
                <t t-if="main_object and 'noindex' in main_object">
                    <t t-if="main_object.index">
                        <meta name="robots" content="noindex" />                        
                    </t>
                </t>
            </xpath>
</template>

但是模板看不到字段noindex

我也尝试扩展class website.seo.metadata。什么都没改变。

在标题中提供以下信息:

<html lang="ru-RU" data-website-id="1" data-editable="1" data-view-xmlid="882" data-main-object="pr_filials.service(13,)" data-oe-company-name="SiteName"> 

如果我尝试连接名称字段,则一切正常-显示其中的数据。

如何从标题的 noindex 字段中获取数据?

更新: 我扩展了 ir.ui.view

class view(osv.osv):
    _name = "ir.ui.view"
    _inherit = "ir.ui.view"
    _columns = {
        'noindex': fields.boolean("Noindex"),
    }

在类服务中添加了以下代码:

@api.onchange('noindex')
def _set_noindex(self):
    self.website_meta_noindex = self.noindex
    url = u'/uslugi/' + self.url_name
    _logger.warning('URL: %s', url)
    self.write_to_ui_view(url=url, noindex=self.noindex)

def write_to_ui_view(self, cr, uid, url, noindex=False, ispage=True, template='pr_filials.servicepage', context=None):
    _logger.error('write_to_ui_view')
    context = context or {}
    imd = self.pool.get('ir.model.data')
    view = self.pool.get('ir.ui.view')
    template_module, template_name = template.split('.')

    # completely arbitrary max_length
    page_name = url
    page_xmlid = "%s.%s" % (template_module, page_name)

    _, template_id = imd.get_object_reference(cr, uid, template_module, template_name)
    website_id = context.get('website_id')
    key = template_module+'.'+page_name
    page_id = None

    if view.search(cr, openerp.SUPERUSER_ID, [('key', '=', key)]):
        page_id = view.search(cr, openerp.SUPERUSER_ID, [('key', '=', key)])[0]
    else:
        page_id = view.copy(cr, uid, template_id, {'website_id': website_id, 'key': key}, context=context)
    page = view.browse(cr, uid, page_id, context=dict(context, lang=None))
    page.write({
        'arch': page.arch.replace(template, page_xmlid),
        'name': page_name,
        'page': ispage,
        'noindex': noindex
    })
    return page_xmlid

现在,我可以使用main_Object中的noindex了。但是每次返回False。在DB中显示True,但提交noindex返回False ...

我尝试检查页面上的noindex值。为此,我在标头中添加了元标记,并将noindex转换为字符串:

<meta name="RB" content="noindex" ><t t-raw="str(main_object.noindex)"/></meta>

当前结果: enter image description here

在数据库中,该记录的值为True: enter image description here

1 个答案:

答案 0 :(得分:0)

保持简单...

我使用qweb模板保留它:

<template id="layout" inherit_id="website.layout">
                <xpath expr="html/head" position="inside">
                    <t t-if="page_data.noindex">
                            <meta name="robots" content="noindex" />
                    </t>
                </xpath>
</template>

<template id="servicepage">
            <t t-call="pr_filials.layout">...</t>
</template>

我不需要任何修改过的类。