2015-04-03 7 views
0

Я пытаюсь реализовать многое поле выбора, в котором вы выбираете проект. Если вы выбрали проект, есть еще одно многое поле, из которого вы можете выбрать задачу. Эта задача должна быть из выбранного проекта.Получить задания из выбранного проекта

В настоящее время я получил это (заметьте, что я не мог проверить это, потому что я постоянно получаю ошибку XML):

class purchase_order(osv.osv): 
_inherit = 'purchase.order' 

def get_task(self, cr, uid, ids, project_id, context=None): 
    task_obj = self.pool.get('project.task') 
    for task in task_obj.browse(cr, uid, ids, context): 
     task_ids = task_obj.search(cr, uid, [(task.project_id.id, '=', project_id)]) 
     ids_cus = [] 
     for cus in task_obj.browse(cr, uid, task_ids, context): 
      if cus.project.id.id not in ids_cus: 
       ids_cus.append(cus.project_id.id) 
     self.write(cr, uid, ids, {'state_readonly': 'listed', 'task_ids': [(6, 0, ids_cus)]}) 
    return True 

_columns = { 
    'project_id': fields.many2one('project.project', 'Project'), 
    'task_id': fields.selection(get_task, 'Select task'), 
} 

И мой XML выглядит следующим образом:

<record id="purchase_order_form" model="ir.ui.view"> 
     <field name="name">purchase.order.form</field> 
     <field name="model">purchase.order</field> 
     <field name="inherit_id" ref="purchase.purchase_order_form"/> 
     <field name="arch" type="xml"> 
      <field name="origin" position="after"> 
       <field name="project_id" on_change="_get_task(project_id)"/> 
       <field name="task_id" selection="widget"/> 
      </field> 
     </field> 
    </record> 

Что я что делать с XML здесь? И может быть другой путь?

ответ

1

Это решало мой проблема, я добавил поля. Связанные для цепочки поля:

_columns = { 
    'task_id': fields.related('project_id', 'tasks', type='many2one', relation='project.task', store=True, 
           string='Task') 
} 

А затем настроить мой XML (как @Empiro Technologies сказал):

<record id="purchase_order_form" model="ir.ui.view"> 
     <field name="name">purchase.order.form</field> 
     <field name="model">purchase.order</field> 
     <field name="inherit_id" ref="purchase.purchase_order_form"/> 
     <field name="arch" type="xml"> 
      <field name="origin" position="after"> 
       <field name="project_id"/> 
       <field name="task_id" domain="[('project_id','=', project_id)]"/> 
      </field> 
     </field> 
    </record> 
1

Не нужно писать метод фильтрации задач в соответствии с проектом в вашем случае, просто измените несколько вещей, как следует.

class purchase_order(osv.osv): 
_inherit = 'purchase.order' 

_columns = { 
    'project_id': fields.many2one('project.project', 'Project'), 
    'task_id': fields.many2one('project.task', 'Tasks'), 
} 

и изменить XML,

<record id="purchase_order_form" model="ir.ui.view"> 
     <field name="name">purchase.order.form</field> 
     <field name="model">purchase.order</field> 
     <field name="inherit_id" ref="purchase.purchase_order_form"/> 
     <field name="arch" type="xml"> 
      <field name="origin" position="after"> 
       <field name="project_id" /> 
       <field name="task_id" domain="[('project_id','=',project_id.id)]" widget="selection" /> 
      </field> 
     </field> 
    </record> 

В существующий код вы сделали небольшую ошибку,

selection="widget" не действует в XML, вы должны написать widget="selection"

Смежные вопросы