Как передать контекст от мастера к контроллеру и получить значение этого контекста в контроллере в Odoo 12?

У меня есть мастер, я выбираю отдел, затем вызываю действие (определенное в xml), которое вызывает контроллер. Я также установил (определил) свой собственный контекст и передал выбранный идентификатор отдела в контексте. Я хочу передать этот контекст при вызове действия, которое загружает контроллер в контроллер. В контроллере мне нужно получить доступ к значениям переданного контекста. Это код, в котором я устанавливаю контекст в контроллере и возвращаю действие с контекстом:

@api.multi
def action_select_department(self):
    ctx = dict(self._context)
    if self.department_id:
        self.state = 'display'
        ctx.update({'dep_id': self.department_id.id})
        print('Dept id:::::::::::::::::::', self.department_id.id, ctx)
        return {
            'name': _('Website Next Patient Screen'),
            'type': 'ir.actions.act_url',
            'context': ctx,
            'url': '/next_patient',
            'target': 'self'
        }

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

 -*- coding: utf-8 -*-

from odoo import http
from odoo.http import request
from odoo.tools.translate import _


class hms_next_patient_screen(http.Controller):
    @http.route(['/next_patient'], type='http', auth="public", website=True)
    def next_patient(self, **kw):
        ctx = request.env.context.copy()
        dept = http.request.evn['nl_hms_next_patient.next.patiend.screen.wizard']
        print('DEPT:::::::::::::::::::::::::::::::', dept)
        print (">>>>>>>>>>>>>>>", ctx, self, kw)
        app_obj = request.env['hms.appointment']
        one = app_obj.sudo().search([('state', '=', 'in_consultation')], limit=1)
        next = app_obj.sudo().search([('state', '=', 'waiting')])
        two = three = four = app_obj
        if len(next)>=1:
            two = next[0]
        if len(next)>=2:
            three = next[1]
        if len(next)>=3:
            four = next[2]
        return request.render("acs_hms_next_patient_screen.next_patient_view",{'one':one,'two':two,'three':three,'four':four})

Метод в мастере работает нормально, и действие вызывается при загрузке контроллера. Но я не могу получить доступ к значению контекста в контроллере. Как я могу передать настраиваемый контекст и получить к нему доступ в контроллере?


person Ibrahim Rahimi    schedule 16.09.2019    source источник
comment
Задумывались ли вы об использовании параметра URL-адреса для Department_id?   -  person CZoellner    schedule 16.09.2019
comment
На самом деле нет, я просто хотел передать контекст с Department_id и не думал об этом случае.   -  person Ibrahim Rahimi    schedule 16.09.2019


Ответы (1)


Вам не нужно передавать детали в качестве контекста контроллеру, вы можете передать их с помощью URL-адреса. Пожалуйста, попробуйте это.

В мастере

 return {
      'name': _('Website Next Patient Screen'),
      'type': 'ir.actions.act_url',
      'url': '/next_patient?dep_id=%s' % self.department_id.id
      'target': 'self'
   }

Вы можете получить сведения, переданные в URL-адресе, из аргумента kw в контроллере.

В контроллере

  department_id = kw.get('dep_id')
person Ajmal JK    schedule 17.09.2019