2016-09-01 11 views
3

У меня есть одна форма с полями,Odoo: Написать функцию Odoo 8

Name : 
First Name: 
Second Name: 
Last Name: 

Я написал создать функцию, когда мы вводим имя, второе имя, фамилию, он установит имя

First Name: Test First 
Second Name: Test Second 
Last Name: Test Third 

он будет генерировать

Name : Test First Test Second Test Third 

Это из-за создать удовольствие фикция.

@api.model 
def create(self, vals): 
    child = vals.get('child_first_name') 
    child_middle = vals.get('child_middle_name') or ' ' 
    child_last = vals.get('child_last_name') or ' ' 
    if child: 
     vals['name'] = self.env['ir.sequence'].next_by_code('application_form') 
     vals['child_name'] = child + ' ' + child_middle + ' ' + child_last 
    return super(application_form, self).create(vals) 

Когда я отредактировать любой из этих полей

First Name 
Second Name 
Last Name 

Он должен установить имя снова.

Просьба указать написать функция с хорошим способом.

В том же пути:

Вопрос 2:

Существует один логический поле.

Справочно:

Я написал номер последовательности, которые будут созданы в создать метод. Если я сниму эти логические поля, будет создан другой набор номера последовательности.

Просьба указать написать функция для обоих.

для написания выше вопрос

@api.multi 
def write(self, vals): 
    application = self.browse(self.id) 
    if vals.has_key('child_first_name'): 
     fname = vals.get('child_first_name') or ' ' 
    else : 
     fname = application.child_first_name 
    if vals.has_key('child_middle_name'): 
     mname = vals.get('child_middle_name') or ' ' 
    else : 
     mname = application.child_middle_name 
    if vals.has_key('child_last_name'): 
     lname = vals.get('child_last_name') or ' ' 
    else : 
     lname = application.child_last_name 
    full_name = fname + ' ' + mname + ' ' + lname 
    vals.update({'child_name':full_name}) 
    return super(application_form, self).write(vals) 
+0

Благодарим за редактирование –

ответ

1

Вот пример того, как можно достичь этого

@api.multi 
def write(self, vals): 
    # checks that new field value 
    # is not equal to old one 
    def _is_changed(name): 
     return name in vals and self[name] != vals[name] 

    # returns new field value if present 
    # otherwise return old value if present 
    # else return default value 
    def _get_field(name, default=''): 
     return vals.get(name, self[name]) or default 

    # choose which sequence to use based on boolean seq_flag 
    seq = 'some_seq' if _get_field('seq_flag', False) else 'application_form' 

    # if one of name parts was changed 
    if _is_changed('child_first_name') or \ 
     _is_changed('child_middle_name') or \ 
     _is_changed('child_last_name'): 
     vals['name'] = self.env['ir.sequence'].next_by_code(seq) 
     name_parts = [ 
      _get_field('child_first'), 
      _get_field('child_middle_name'), 
      _get_field('child_last_name') 
     ] 
     # write only non-empty name parts 
     vals['child_name'] = " ".join([_ for _ in name_parts if _]) 
    return super(application_form, self).write(vals) 

Также вы можете использовать вычисленный child_last_name поле и @api.depends решить первую часть вашего вопроса

child_name = fields.Char(compute='_compute_name') 

@api.one 
@api.depends('child_first', 'child_middle_name', 'child_last_name') 
def _compute_upper(self): 
    name_parts = [ 
     self.child_first, 
     self.child_middle_name, 
     self.child_last_name 
    ] 
    self.child_name = " ".join([_ for _ in name_parts if _]) 
+0

Tha nks vsminkov. У меня есть логические поля ** Пример: для справки **. Когда я проверяю, что логическое поле Sequence Number будет равно AM/001, и когда я снижу отметку о том, что порядковый номер булевых полей будет равен ORD/001. Предположим, что порядковый номер создан как ORD/001, я иду и редактирую это логическое поле, тогда оно должно быть как AM/001. Он должен меняться только один раз. Поскольку каждый раз, когда я редактирую другие поля в этой форме, sequnce также будет увеличиваться –

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