2015-10-07 5 views
0

У меня есть 2 класса, первая из которых содержит функцию со списком, созданным в ней.odoo 8 переменная домена из другого класса

class the_first_class(models.Model) 
    _inherit = 'mrp.bom' 

    def first_function(self): 
     list1 = [] 

Второй класс, содержащий поле, где требуется указать домен на основе списка, созданного в «first_function» из «the_first_class». Примерно:

class second_class(models.Model) 
    _inherit = 'mrp.bom.line' 

    field1 = fields.Many2one('product.product', domain=[('id','in',list1)]) 

Есть ли способ, который я могу назвать «list1» следующим образом? Или, может быть, указать домен на основе функции? А затем вызвать переменную "list1" внутри функции, как:

self.env['mrp.bom'].list1 

Полный код:

class bom_excl_list(models.Model): 
_inherit = 'mrp.bom' 

excl_list = fields.Many2many(comodel_name='product.template') 

def methodA(self): 
    self.test = [17,18] 

@api.onchange('bom_line_ids', 'excl_list') 
def get_excl_list(self): 

    print self.excl_list 
    list1 = [] 
    for i in self.excl_list: 
     list1.append(i.id) 

    list2 = [] 
    for j in self.bom_line_ids.product_id: 
     list2.append(j.id) 


class bom_filtered_products(models.Model): 

_inherit = 'mrp.bom.line' 

def methodB(self): 
    A = bom_excl_list() 
    A.methodA() 
    print "List", A.test 
    return [('id','=',A.test)] 

filtered_products = fields.Many2one('product.product', domain=methodB) 

views.xml:

<record model="ir.ui.view" id="view_bom_form"> 
     <field name="name">mrp.bom.form</field> 
     <field name="model">mrp.bom</field> 
     <field name="inherit_id" ref="mrp.mrp_bom_form_view"/> 
     <field name="arch" type="xml"> 
      <xpath expr="//page[@string='Components']/field[@name='bom_line_ids']/tree/field[@name='product_id']" position="after"> 
       <field name="filtered_products"/> 
      </xpath> 
      <xpath expr="//page[@string='Properties']/group" position="after"> 
       <group> 
        <!-- <field name="excl_list" widget="many2many_checkboxes"/> --> 
        <field name="excl_list"/> 
       </group> 
      </xpath>  
     </field>    
</record> 

ответ

1

Согласно питона подхода вы можете сделать это по следующему образцу кода

class Class_A(): 
    def methodA(self): 
     self.myList = [] 

class Class_B(): 
    def methodB(self): 
     A = Class_A() 
     A.methodA() 
     print "Wow! You got your list here ->", A.myList 

Вы также можете объявить список в init(), если вы не хотите вызывать метод класса_A. По моим знаниям он также работает для Odoo8.

+0

Привет, когда я выполняю этот код, я получаю следующее сообщение об ошибке: Сведения об ошибке: объект «NoneType» не имеет атрибута "Methoda» при разборе /root/git/odoo/modules/project1/views.xml:634, рядом с .... – Jesse

+0

введите свой полный код, что было вы реализуете файл xml ... –

+0

Мой код такой же, как тот, который вы указали выше, за единственным исключением, что первый класс (Class_A) наследует от «mrp.bom» и второго класса (Class_B) от «mrp. bom.line ' Я использую файл views.xml для отображения других полей, объявленных в первом классе. Но это работало до того, как я добавил только новый метод (methodA) и список – Jesse

0

Ваш полный код выглядеть после некоторых изменений ...

class bom_excl_list(models.Model): 
    _inherit = 'mrp.bom' 

    excl_list = fields.Many2many(comodel_name='product.template') 

    def methodA(self): 
     print "***methodA is Calling***"  
     test = [17,18] 
     return test 


    @api.onchange('bom_line_ids', 'excl_list') 
    def get_excl_list(self): 
     print self.excl_list 
     list1 = [] 
     for i in self.excl_list: 
      list1.append(i.id) 

     list2 = [] 
     for j in self.bom_line_ids.product_id: 
      list2.append(j.id) 


class bom_filtered_products(models.Model): 
    _inherit = 'mrp.bom.line' 

    def methodB(self): 
     bom = self.env['mrp.bom'] 
     print "You get your list here------------>>>>>", bom.methodA() 
     #A = bom_excl_list() 
     #A.methodA() 
     #print "List", A.test 
     #return [('id','=',A.test)] 
     return [('id','=',bom.methodA())] 

    filtered_products = fields.Many2one('product.product', domain=methodB)