Как заполнить поле выбора в тритоне

У меня есть 2 модуля в тритон первый employee а второй pointage, Я пытаюсь добавить поле выбора, которое позволяет мне выбрать pointage,

Для этого мы должны создать список кортежей pointagedef = [('', '')] теперь у нас есть заполнить его, но проблема в том, что я не могу найти документацию, чтобы понять, как это сделать

pointage= fields.Selection(pointagedef, 'grh.pointage')   

я пытаюсь сделать что-то вроде:

for pointage in pointages:
    pointagedef.append((pointage, pointage))

1 ответ

Решение

Вам просто нужно объявить список из двух кортежей значений со значениями. Что-то вроде:

colors = fields.Selection([
   ('red', 'Red'),
   ('green', 'Green'),
   ('blue', 'Blue'),
], 'Colors')

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

Вы также можете передать имя функции, которая возвращает список из двух значений. Например:

colors = fields.Selection('get_colors', 'Colors')

@classmethod
def get_colors(cls):
   #You can access the pool here. 
   User = Pool.get('res.user')
   users = User.search([])
   ret = []
   for user in users:
      if user.email:
         ret.append(user.email, user.name)
   return ret

Также, если вы хотите получить доступ к одной таблице, вы можете использовать поле Many2One, добавив widget="selection" в определении представления, чтобы клиент отобразил виджет выбора вместо стандартного и предварительно загрузил все записи таблицы в выбор.

Другие вопросы по тегам