2015-08-24 5 views
0

У меня такая ситуация w/c, я не знаю, что с этим делать. Дело заключается в следующем: В классе sale_order У меня есть такое определение:Как заполнить поле one2many из другого one2many поля в python?

... 
'sched_lines' : fields.one2many('schedule.schedule','Schedule'), 
'factor_lines' : fields.one2many('sale.order.factor','Factor'), 

Так же, в классе account_invoice У меня также есть такое определение:

... 
'sched_lines' : fields.one2many('schedule.schedule','Schedule'), 
'factor_lines' : fields.one2many('sale.order.factor','Factor'), 

Назад к классу sale_order я переопределить метод manual_invoice,

for sale_order in self.browse(cr,uid,ids,context=context): 
     _logger.info("\n\t\t\tFACTOR LINES IN SALE ORDER ... %s"%(str(sale_order.factor_lines))) 
     _logger.info("\n\t\t\tHISTORY IN SALE ORDER ... %s"%(str(sale_order.sched_lines))) 
     _logger.info("\n\t\t\tSALE ORDER ID ... %s\n\t\t\tIDS ... %s"%(str(sale_order.id),str(ids))) 
     inv_id = self.pool.get('account.invoice').search(cr,uid,[('id','in',[new_inv_ids]),('origin','=',sale_order.name)]) 

     factor_list = self.pool.get('sale.order.factor').search(cr,uid,[('invoice_id','=',inv_id[0])]) 
     _logger.info("\n\t\t\tfactor_list...%s"%(str(factor_list))) 
     factor_lines1 = [factors.id for factors in self.pool.get('sale.order.factor').browse(cr,uid,factor_list,context=context)] 
     _logger.info("\n\t\t\tfactor_lines1...%s"%(str(factor_lines1))) 

     # cr.execute('select id from sale_order_factor where invoice_id = %s', (tuple(inv_id))) 
     #---------------- factor_lines1 = map(lambda x: x[0], cr.fetchall()) 
     # factor_lines1 = [(1,0,[factors.id for factors in sale_order.factor_lines])] 
     #--- _logger.info("\n\t\t\tfactor_lines1...%s"%(str(factor_lines1))) 

     self.pool.get('account.invoice').write(cr,uid,inv_id,{ 
                   'sched_ids': [(6,0,[sched.id for sched in sale_order.sched_lines])], 
                   'factor_lines': [(6,0,[factor.id for factor in sale_order.factor_lines])],#factor_lines1 
                   }) 

Что я не могу понять, так это то, что это заявление «[(6,0, [factor.id for factor in sale_order.factor_lines])]« не работает. Когда я просматриваю счет-фактуру, он не заселен. Это источник, то есть factor_lines в sale_order, не пуст. Хотя это утверждение «[(6,0, [sched.id для расписания в sale_order.sched_lines])]« отлично работает. Что находится внутри в sched_lines от sale_order переносится отлично. Кто-нибудь может указать, что недостает, если есть, в моем коде? Я действительно застрял в этом.

Любая помощь очень ценится.

ответ

0

Хорошо, я понял, что в коде нет ничего плохого. Ошибка на моем объявлении

'factor_lines' : fields.one2many('sale.order.factor','Factor'), 

Вместо того, чтобы указывать его на это счетчик часть (many2one) в классе sale_order_factor. Он указывает на другой класс. Кстати, я забыл, что мое заявление выше неправильно установлено, как видно на основной части этого вопроса, возможно, опечатки.

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