2015-08-27 4 views
0

В моей папке класса a есть много товаров и много сумм. Мне нужно использовать фильтр домена в моем поле good_id из суммы класса, в этом поле мне нужно показать список товаров моей папки.Openerp динамический фильтр домена

поэтому я создаю функцию в классе суммы (_get_folder_list_goods), которая возвращает список товаров в папке, и я добавляю атрибут домена в поле good_id из суммы класса.

вот мои классы:

class folder(osv.osv): 
_name = 'folder' 

_columns = { 

    'name' : fields.char(u'Numéro',size=50, readonly=True), 
    'goods_ids': fields.many2many('good', 'doss_bien_rel', 'folder_id', 'good_id', 'Goods'), 
    'amount_id': fields.one2many('amount', 'folder_id', 'Amounts'), 

....}

class good(osv.osv): 
_name = 'good' 
_columns = { 

    'name' : fields.function(_name_get_fnc, type="char", string=u''), 

....}

class amount(osv.osv): 
_name = 'amount' 

def _get_folder_list_biens(self, cr, uid,folder_id, context={}): 
    liste_goods=[] 
    object_folder = self.pool.get('folder').browse(cr,uid,folder_id,context) 
    if object_folder.goods_ids: 
     for good in object_folder.goods_ids: 
      liste_goods.append(good.id) 
    return liste_goods 

_columns = { 

    'folder_id': fields.many2one('folder', 'Ref folder', select=True), 
    'good_id':fields.many2one('good', Goos',domain="[('id', 'in', _get_folder_list_biens(folder_id))]"), 
} 

Я получил эту ошибку:

Uncaught Error: NameError: name '_get_folder_list_biens' is not defined

ответ

1

Домен используется на клиенте, когда пользователь начинает использовать ключ (или поиск) и хорошо, и он (клиент) ничего не знает об этом методе. Что вам нужно сделать, так это создать функциональное поле типа many2one, которое вызывает _get_folder_list_biens и возвращает список идентификаторов. Поместите новое функциональное поле в вашу форму как невидимое, а затем создайте свой домен ('id', 'in', my_functional_field)

+0

Благодарим Adrian.i, создав функциональное поле, как вы предлагаете, и сделайте мой домен. он работает только для существующих линий, это означает, что, когда я создаю новую строку суммы, домен пуст, потому что он еще не вводит функцию (до того, как я сохраню функцию поля пуст), но как только я сохраню, она имеет значение и когда я редактирую свой домен, отлично работает. Моя проблема теперь в том, как установить домен с самого начала. – nadia

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