2017-07-12 137 views
2

我添加 'LOCATION_ID' 字段树视图res.user到用户连接到某个位置如何筛选与动态字段odoo-10

类ResUser(models.Model): _inherit ='res.users '

current_location_id=fields.Many2one('physical.location',string="Current Loction") 
allowed_location_ids=fields.Many2many('physical.location',string="Allowed Location") 

我想筛选只与current_location_id = user_current_location_id

<filter string="My visits" name="filter_my_visits" 
         domain="[('current_location_id','=',current_location_id)]"/> 

其给出该错误消息中的访问

Uncaught Error: Failed to evaluate search criterions: 
{"code":400,"message":"Evaluation Error","data":{"type":"local_exception","debug":"Local evaluation failure\nNameError: name 'current_location_id' is not defined\n\n{\"domains\":[[],\"[('current_location_id','=',current_location_id)]\"],\"contexts\":[{\"lang\":\"en_US\",\"tz\":false,\"uid\":1,\"params\":{\"action\":354,\"min\":1,\"limit\":80,\"view_type\":\"list\",\"model\":\"visit.visit\",\"menu_id\":241,\"_push_me\":false}},{}],\"group_by_seq\":[]}"}} 

鉴于唯一可用的领域直接调用的UID郎...等 所以我试图重写阅读方法来更新背景,但它似乎并没有在视图中进行更新,仍然给未定义 'current_location_id'

@api.multi 
    def read(self, fields=None, load='_classic_read'): 
     ctx = self.env.context.copy() 
     ctx.update({ 'user_current_location_id':self.env.user.current_location_id.id}) 

     return super(Visit,self.with_context(ctx)).read(fields=fields,load=load) 

visit_tree_view

<record id="visit_visit_tree_view" model="ir.ui.view"> 
    <field name="name">visit.visit.tree</field> 
    <field name="model">visit.visit</field> 
    <field name="arch" type="xml"> 
     <tree string="Visits"> 
      <field name="name" /> 
      <field name="date"/> 
      <field name="visit_type" /> 
      <field name="patient_id"/> 
      <field name="hcp_id"/> 
      <field name="current_location_id" /> 
      <field name="user_current_location_id"/> 
      <field name="severity"/> 
      <field name="state"/> 
     </tree> 
    </field> 
</record> 

六坐行动

<record id="visit_visit_act" model="ir.actions.act_window"> 
    <field name="name">Visit</field> 
    <field name="res_model">visit.visit</field> 
    <field name="view_type">form</field> 
    <field name="view_mode">tree,form</field> 
    <field name="context">{'search_default_filter_my_visits':1}</field> 
    <field name="search_view_id" ref="view_visit_filter"/> 
</record> 

这里是我做过什么:

@api.multi 
def vsit_action(self): 
    ctx = self.env.context.copy() 

    ctx.update({'search_default_current_location_id': self.env.user.current_location_id.id, 
       'user_current_location_id': self.env.user.current_location_id.id}) 
    return { 
     'name': 'Visit', 
     'view_type': 'form', 
     'view_mode': 'tree,form', 
     'res_model': 'visit.visit', 
     'type': 'ir.actions.act_window', 
     'context': dict(ctx), 
     'search_view_id': self.env.ref('eroyal_visit.view_visit_filter').id 
    } 

过滤器:

<filter string="My visits" name="filter_my_visits" 
          domain="[('current_location_id', '=', context.get('user_current_location_id'))]"/> 


the visit action 
    <record id="visit_visit_act" model="ir.actions.server"> 
     <field name="name">Visit</field> 
     <field name="model_id" ref="model_visit_visit"/> 
     <field name="state">code</field> 
     <field name="code"> 
       action = env['visit.visit'].vsit_action() 


     </field> 
    </record> 

的default_search_current_id工作正常,但过滤filter_my_visits不过滤的观点current_location_id =没有,而其正确设置在背景 坦克

+0

我不明白你的过滤器。你想实现什么?如果您想按给定位置过滤,只需将该字段放入搜索视图。例如:在客户树中,您可以搜索标签,但不必键入searchterm并按下回车键(快速搜索),您必须键入searchterm,选择要搜索的“字段”(在我的示例标签中;用鼠标或箭头键),然后按回车。 – CZoellner

+0

我更新了问题,我想设置默认过滤器的问题,我不想给它静态值既不希望用户输入值,我想设置它的值为user_current_location_id, –

回答

1

它应该有可能与一点点的解决方法。不要使用ir.actions.act_window尝试使用应该返回窗口操作的ir.actions.server。 为什么?因为您需要将用户的位置ID置入该窗口操作的上下文中。我只能通过使用带有代码的服务器动作来看到这种可能性。

只需填写上下文与位置标识的窗口作用:

ctx = dict(env.context, 
    {'user_location_id': env.user.current_location_id.id, 
    'search_default_filter_my_visits': 1} 
return { 
    'name': 'Visit', 
    'view_type': 'form', 
    'res_model': 'visit.visit', 
    'type': 'ir.actions.act_window', 
    'context': ctx, 
    'search_view_id': env.ref('my_module.view_visit_filter'); 
} 

并为您的过滤器:

<filter string="My visits" name="filter_my_visits" 
    domain="[('current_location_id', '=', context.get('user_location_id')]"/> 
+0

greate ... so我在哪里编写Python代码?! –

+0

小提示:尝试通过'ir.actions.server' ;-) - > [示例](https://github.com/odoo/odoo/blob/10)搜索Odoo的xml代码。0/addons/crm/views/crm_lead_views.xml#L673) – CZoellner

+0

非常感谢你CZoellner ..我编辑了这个问题,以得出我设法做的事情 –