переменная домена odoo 8 из другого класса

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

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)])

Есть ли способ, которым я могу назвать «список1» таким образом? Или, может быть, указать домен на основе функции? А затем вызовите переменную «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)  

просмотры.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>  

person Jesse    schedule 07.10.2015    source источник


Ответы (2)


В соответствии с подходом python вы можете сделать это, следуя примеру кода

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(), если не хотите вызывать метод Class_A. Насколько мне известно, это также работает для Odoo8.

person Jainik Patel    schedule 07.10.2015
comment
Привет, когда я выполняю этот код, я получаю следующую ошибку: Сведения об ошибке: объект «NoneType» не имеет атрибута «methodA» при анализе /root/git/odoo/modules/project1/views.xml: 634, рядом с моделью записи = ir .ui.view id=view_bom_form› .... - person Jesse; 08.10.2015
comment
Мой код такой же, как тот, который вы указали выше, за исключением того, что первый класс (Class_A) наследуется от «mrp.bom», а второй класс (Class_B) от «mrp.bom.line». Я использую представления. xml для отображения других полей, которые я объявил в первом классе. Но это работало до того, как я добавил только новый метод (methodA) и список - person Jesse; 08.10.2015

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

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)  
person bud-e    schedule 09.10.2015