Фильтр домена на основе поля в res.users для представления дерева Odoo XML - PullRequest
0 голосов
/ 24 сентября 2018

Мой вопрос:

Как я могу ссылаться на поле в res.user и использовать его в качестве пользовательского фильтра при открытии дерева в Odoo 10?

Я расширил res.user, добавив поле с именем: assigned_office.Это поле выбора.

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

Я попытался добавить следующее в свое оконное действие, но оно дало мне ошибку (NameError: name 'user' not defined).

<field name="domain">[('responsible_office','=',user.assigned_office)]</field>    

Я попытался изменить вид поиска, добавив варианты этого всуществующий фильтр:

('responsible_office','=',user.assigned_office)
('responsible_office','=',ref='self.assigned_office))
('responsible_office','=',ref=assigned_office)

Но я также получаю ошибки:

Ошибка: не удалось оценить критерии поиска: {"code": 400, "message": "EvaluationОшибка "," data ": {" type ":" local_exception "," debug ":" Ошибка локальной оценки \ nExpected \ ") \", got \ "(name) \" \ n \ n {\ "domains \": [[], \ "[
('expiration_date', '<=', (context_today ()) <br>, ('liability_org', '=', ref = 'self [' assign_org ']')
] \ "], \" contexts \ ": [{\" lang \ ": \" en_US \ ", \" tz \ ": false, \" uid \ ": 1, \" search_default_weekly_expirees_filter \ ":1, \ "params \": {\ "action \": 205}}, {}], \ "group_by_seq \": []} "}}

Я явно что-то не так делаюи я надеюсь, что есть простой ответ.

Вот мой код:

Действие окна:

<record id="my_tool_weekly_expirees_action" model="ir.actions.act_window" >              
  <field name="name">Weekly Expirees</field>
  <field name="res_model">my_tool.member</field>
  <field name="view_type">form</field>
  <field name="view_mode">tree,form</field>
  <field name="context">{"search_default_weekly_expirees_filter":1}</field>  
  <field name="view_id" ref="weekly_expirees_view"/>         
</record>

ПОИСК:

<record id="members_search_view" model="ir.ui.view" >
  <field name="name">Search</field>
  <field name="model">my_tool.member</field>
  <field name="arch" type="xml">
      <search>
          <field name="first_name"/> 
          <field name="last_name"/>

          <field name="expiration_date" string="weekly_expirees" filter_domain="[('expiration_date','&lt;=',(context_today())]"/>  
          <separator/>
          <filter string="Weekly Expirees" name="weekly_expirees_filter" domain="[('expiration_date','&lt;=',(context_today())]" help="..."/>
          <separator/>             

          <field name="expiration_date"/>
          <field name="responsible_office"/>
      </search>
  </field>      
</record>

TREE VIEW

<record id="members_list_view" model="ir.ui.view" >
  <field name="name">members.list</field>
  <field name="model">my_tool.member</field>
  <field name="arch" type="xml">       
      <tree>          
      <field name="first_name"/>
      <field name="middle_name"/>
      <field name="last_name"/>             
      <field name="expiration_date"/> 
      <field name="responsible_office"/> 
      <field name="country"/>  
    </tree>
  </field>
</record>

Я искал stackoverflow.com и форумы на odoo.com и нашел сложные подходы, которые я либо не понимаю, либо хочу сделать:

Наиболеемногообещающе, но все равно кажется, что это обходной путь:

Фильтр домена Odoo v9 со значением user.id выдает ошибку, что пользователь не определен

Еще одинчто я обнаружил, что может быть даже лучше.

как отфильтровать древовидное представление с динамическим полем odoo-10

1 Ответ

0 голосов
/ 24 сентября 2018

Наиболее простыми способами заставить ваш домен работать будет:

  • Создание записи безопасности ir.rule для модели, в которой вы сможете использовать переменную userдля ссылки на текущего пользователя в поле domain_force, например:

    <record id="my_tool_member_rule" model="ir.rule">
        <field name="name">My Tool Members Rule</field>
        <field name="model_id" ref="my_tool.member"/>
        <field name="domain_force">[('responsible_office','=',user.assigned_office)]</field>
        <field name="perm_read" eval="True"/>
        <field name="perm_create" eval="False"/>
        <field name="perm_write" eval="False"/>
        <field name="perm_unlink" eval="False"/>
    </record>
    
  • Переопределить модель my_tool.member Метод поиска для добавления настраиваемого домена, например:

from odoo import api, models class MyToolMember(models.Model): _name = 'my_tool.member'

    def search(self, args, offset=0, limit=None, order=None, count=False):
        args.append(('responsible_office', '=', self.env.user.assigned_office))
        return super(MyToolMember, self).search(args, offset=0, limit=None, order=order, count=False)
...