2016-07-15 2 views
0

Я пытаюсь сгенерировать заказ на поставку из производственного заказа. Я создал много много полей для получения нескольких продуктов. Я хочу отправить несколько идентификаторов продуктов в свою пользовательскую функцию. Я могу отправить 1 значение, но отправка более одного дает ошибку, поскольку Expected singleton: product.template(4, 3).Как отправить несколько значений в поле many2many в odoo?

from openerp import models,fields,api 
class generate_purchase_order(models.Model): 
    _name = 'mrp_to_purchase_order' 
    product_id = fields.Many2many('product.template',string='Products',required=True) 

    @api.multi  
    def generate_purchase_order2(self): 
     for wizard in self: 
      mrp_obj = self.env['mrp.production'] 
      mrp_obj.generate_purchase_order(wizard.product_id.id) #function call 
     return { 'type': 'ir.actions.act_window_close'} 

mrp_custom.py,

from openerp import models,api 
class mrp_production(models.Model): 
    _inherit = 'mrp.production' 

    @api.multi 
    def generate_purchase_order(self,product_id): 
     purchase_line_obj = self.env['purchase.order.line'] 

     context = self._context 
     for order in self.browse(context['active_ids']):  
      for line in order.bom_id.bom_line_ids:  
       if line.product_id.id != product_id:#problem line 
        continue 
       #rest of code  

ответ

1
singleton: product.template(4, 3) 

Эта ошибка означает, что код ожидает одной записи не Recordset, поэтому вы должны изменить код, чтобы использовать или записи делает ensureone с пытаясь угадать уловить и избежать ошибок. Это общая информация.

Теперь, если вы хотите получить несколько записей из many2many, это не проблема, вы должны передать только этот объект many2many, а затем работать с ним. После того, как объект many2many работать с каждой записи из этого набора записей вы должны использовать for record in recordset:

Также wizard.product_id.idэто ошибка !!! product_id является many2many, так что вы должны пройти PRODUCT_ID или если вы хотите, чтобы просмотреть сами вы должны пройти product_id.ids

+0

Я думаю, что он должен хранить product_id в виде списка, так что я могу извлечь его через цикл в вызываемой функции – Bhanukiran

+0

Вы можете использовать набор записей в цикле и списке тоже, но набор записей проще, если вам нужен только список идентификаторов, то используйте product_id.ids, как один, он даст вам все связанные с ним идентификаторы. –

+0

Я пробовал вот так: для записи in product_ids: print record.product_id.id – Bhanukiran

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