我需要从浏览器获取当前网址并提取已打开模型的名称。 我有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。
请帮助。感谢。
答案 0 :(得分:0)
您可以使用httprequest
获取当前路径from openerp import http
print http.request.httprequest.full_path
但你不应该在 init 方法中调用它,AFAIK init 将在启动时调用一次。
编辑:
如果您需要将信息从模型传递到另一个模型,我建议您通过上下文传递值。
假设audit
与action
模型有很多关系。
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')])