2016-05-02 2 views
2

Мне нужно получить текущий url от браузера и извлечь имя открытой модели. У меня есть 3 модели: аудит, дисфункция и действие, действие имеет поле выбора, содержащее 2 варианта: аудит или дисфункция. Поэтому, когда я создаю действие, я могу выбрать один из них, но когда я создаю аудит, то в форме аудита создайте действие, я хочу, чтобы поле выбора принимало «аудит» как тип от первого. Я заметил, что когда мы вводим форму действия из формы аудита, URL-адрес по-прежнему содержит имя первой модели, которая является «аудитом». Модель аудита имеет много общего с моделью действий. Я написал эту строку в функции инициализации:Как получить текущий url от браузера

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

, но это дает мне эту ошибку:

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

Я ALSE попробовал этот код:

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? 

Но я хочу, чтобы вернуть этот URL:

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

Я работаю с Python 2.7 , odoo 8, окна 7.

Пожалуйста, помогите. Благодарю.

+0

Не могли бы вы предоставить подробный код. Что, собственно, должно быть, например,? – rocksteady

+0

@Tesssnim Посмотрите здесь ackoverflow.com/questions/14468862/how-to-get-current-url-in-python-web-page –

+0

@RichardRublev Я попробовал это раньше Это дает мне эту ошибку: Файл «C: \ Users \ Utilisateur \ git \ persol \ odoo \ addons \ action \ action.py ", строка 63, в _get_origin url = os.environ [" REQUEST_URI "] Файл« C: \ Python27 \ lib \ os.py », строка 425, в __getitem__ return self.data [key.upper()] KeyError: 'REQUEST_URI' – Tessnim

ответ

0

Вы можете получить текущий путь с помощью HttpRequest

from openerp import http 

print http.request.httprequest.full_path 

Но вы не должны вызывать его в инициализации метод, AFAIK инициализации будет вызываться один раз при запуске.

Edit:

Если то, что вам нужно, чтобы передать информацию от модели к другой, я предлагаю вам передавая значение через контекст.

Скажем, audit имеет отношение many2one к модели 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) 

Он не имеет чтобы быть полем для передачи контекста, вы можете сделать это и в кнопке.

+0

Это дает мне этот url: /web/dataset/call_kw/action/create? Я хочу, чтобы он вернул это: http: // localhost: 8069/web? # Id = 10 & view_type = form & model = audit & menu_id = 221 & action = 229 – Tessnim

0

Я нашел это сегодня:

мне просто нужно добавить этот атрибут в поле действия внутри формы аудита

context="{'default_origin':'audit'}" 

принимая к сведению, что в модели действий у меня есть:

origin = fields.Selection([ 
           ('audit', 'Audit'), 
           ('nonconformity', 'nonConformity'),     
           ('dysfunction', 'Dysfunction')]) 
Смежные вопросы