如何从浏览器

时间:2016-05-02 10:53:24

标签: python openerp

我需要从浏览器获取当前网址并提取已打开模型的名称。 我有3个模型:审计,功能障碍和行动,行动有一个选择字段包含2个选择:审计或功能障碍。因此,当我创建一个动作时,我可以自己选择,但是当我创建一个审计时,然后在审计表单中创建一个动作,我希望选择字段采取审计'从第一个类型。 我注意到,当我们从审核表单输入操作表单时,URL仍然保留了第一个模型的名称,即#audit;#39;。审计模型与行动模型有很多关系。我在 init 函数中写了这一行:

print (self.env._current_browser()._current_page) 

但它给了我这个错误:

AttributeError: 'Environment' object has no attribute '_current_browser'

我也试过这段代码:

    import os.path
    from urlparse import urlparse,parse_qs
    print 'hello update'
    url = os.environ["REQUEST_URI"] 
    parsed = urlparse.urlparse(url) 
    print urlparse.parse_qs(parsed.query)['model']

它给了我这个错误:

KeyError: 'REQUEST_URI'

我也试过这段代码:

from openerp import http

print http.request.httprequest.full_path

它给了我这个:

/web/dataset/call_kw/action/create?

但我希望它返回此网址:

http://localhost:8069/web?#id=10&view_type=form&model=audit&menu_id=201&action=221

我正在使用python 2.7,odoo 8,windows 7。

请帮助。感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用httprequest

获取当前路径
from openerp import http

print http.request.httprequest.full_path

但你不应该在 init 方法中调用它,AFAIK init 将在启动时调用一次。

编辑:

如果您需要将信息从模型传递到另一个模型,我建议您通过上下文传递值。

假设auditaction模型有很多关系。

class audit(models.Model):

    _name = "audit"

    action = fields.Many2one('action', string="Action")

在您的观点中传递上下文:

<field name="action" context="{'from':'This is from audit model'}"/>

当你处于action模型时,你可以使用这种方法调用上下文:

self._context.get('from', False)

它不必是传递上下文的字段,也可以在按钮中执行。

答案 1 :(得分:0)

我今天发现了这个:

我只需要将此属性添加到审计表单

内的操作字段中
context="{'default_origin':'audit'}"

注意到我在动作模型中有:

origin = fields.Selection([
                               ('audit', 'Audit'),
                               ('nonconformity', 'nonConformity'),                
                               ('dysfunction', 'Dysfunction')])