2015-09-07 4 views
3

Может ли кто-нибудь дать мне пример, чтобы манипулировать полем many2many с использованием нового API? Я пробовал читать Documentation безрезультатно.Как правильно создать, записать или отменить запись для многого другого с помощью нового API?

Вот мой пример классы:

from openerp import models, fields, api, _ 

class example_class_one(models.Model): 

    _name   = "example.class.one" 

    name   = fields.Char('Name') 
    value   = fields.Float('Value') 

example_class_one() 

class example_class_two(models.Model): 

    _name   = "example.class.two" 

    name    = fields.Char('Name') 
    example_class_ones = fields.Many2many('example.class.one',string='Example Class Ones') 

    @api.one 
    def test(self): 
     #CREATES SOME example_class_ones and assign them to self 
     #MANIPULATE SOME example_class_ones and save them 
     #DELETE SOME example_class_ones from self 
     pass 

example_class_two() 

ответ

1

В Odoo 8 новый ORM API намного лучше, что предыдущий (со всеми этими скучными (кр, UID, идентификаторы, ..) параметры). Одним из больших преимуществ для меня с этим новым API является то, что мы сейчас работаем с объектами , а не ids.

Все, что вам нужно с помощью новых методов, это параметр self. Вы можете перебирать его - это, помимо прочего, также коллекция отдельных объектов.

И есть также одна волшебная переменная - self.env, которая относится к категории Среда и содержит все это cr, uid, etc.. Он содержит также коллекцию всех известных моделей - вот что вам нужно.

Так почему бы вам не попробовать этот способ:

@api.one 
def test(self): 
    model_one = self.env['example.class.one'] 
    model_one.create({'name': 'Some ONE object', 'value': 2.0}) 
    ones = model_one.browse([1, 3, 5]) 
    ones2 = model_one.search([('name', '=', 'Some name')]) 
    # You can imagine - search() return also objects! :) 
    ones2[0].unlink() 
    # Or, to deal with you many2many field... 
    self.example_class_ones += model_one.new({ 
     'name': 'New comer to the many2many relation', 
     'value': 666.0}) 

Надеется, что ответы, которые вы вопрос.

+0

я могу это сделать: 'self.example_class_ones.delete()' удалить все example_class_ones самостоятельно? – William

+0

Я получил эту ошибку 'AttributeError: 'example.class.one' объект не имеет атрибута 'delete'' – William

+0

Поскольку он не удаляется, это отключает(). Извините за эту ошибку. Сейчас я исправляю ответ. –

0

Вы можете обратиться к моему делу, как показано ниже, либо на @api

@api.onchange('opportunity_id') 
    def _get_description(self): 
     if self.opportunity_id.id: 
      self.x_description = self.opportunity_id.x_description 

или объявить как отношения настройки и поля (связанные) как ссылку ниже

Pass custom field values from oppertunity to quotation in odoo 10