Значение полей выбора Odoo 10

Как я могу получить значение полей выбора в odoo 10?

def compute_default_value(self):
    return self.get_value("field")

Я пробовал это,

def compute_default_value(self):
   return dict(self._fields['field'].selection).get(self.type)

Также пробовал это, но это не работает. Пожалуйста, помогите мне, я не мог найти решение.

Спасибо.


person Serdar Eren    schedule 20.09.2017    source источник
comment
Не могли бы вы предоставить дополнительную информацию или код? Я вообще не понимаю этого вопроса.   -  person CZoellner    schedule 20.09.2017
comment
месяц = ​​fields.Selection([(1, 'Очак'), (2, 'Шубат'), (3, 'Март'), (4, 'Нисан'), (5, 'Майыс'), (6, «Хазиран»), (7, «Теммуз»), (8, «Агустос»), (9, «Эйлюл»), (10, «Эким»), (11, «Касым»), (12, «Аралык»). ') ], string='Ay',default=datetime.now().month,required=True) Это мое поле выбора, я хочу получить значение этого поля выбора для использования в другом поле report_date = fields.Char(compute ='compute_selection_value'). Но я не могу получить значение поля выбора.   -  person Serdar Eren    schedule 21.09.2017


Ответы (2)


Вы можете сделать это следующим образом:

self._fields['your_field']._desription_selection(self.env)

Это вернет список выбора пар (значение, метка).

Если вам просто нужны возможные значения, вы можете использовать метод get_values.

self._fields['your_field'].get_values(self.env)

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

class BaseSelectionType(object):
    """ Base abstract class """

    values = None

    @classmethod
    def get_selection(cls):
        return [(x, cls.values[x]) for x in sorted(cls.values)]

    @classmethod
    def get_value(cls, _id):
        return cls.values.get(_id, False)


class StateType(BaseSelectionType):
    """ Your selection """
    NEW = 1
    IN_PROGRESS = 2
    FINISHED = 3

    values = {
        NEW: 'New',
        IN_PROGRESS: 'In Progress',
        FINISHED: 'Finished'
    }

Вы можете использовать этот класс где угодно, просто импортируйте его.

state = fields.Selection(StateType.get_selection(), 'State')

И очень удобно использовать их в коде. Например, если вы хотите что-то сделать в определенном состоянии:

if self.state == StateType.NEW:
    # do your code ...
person tidylobster    schedule 21.09.2017
comment
Большое спасибо, все работает. На самом деле я благодарен. Хорошего дня. - person Serdar Eren; 21.09.2017
comment
Только что заметил, вы хотите получить текущее выбранное значение. Просто используйте self.your_field - person tidylobster; 21.09.2017

Я не совсем понимаю вопрос, но позвольте мне попытаться ответить. Почему бы просто не определить выбор как метод и использовать его для обеих ситуаций:

from datetime import datetime
from odoo import models, fields


class MyModel(models.Model):
    _name = 'my.model'

    def month_selection(self):
        return [(1, 'Month1'), (2, 'Month2')]

    def compute_default_value(self):
        selection = self.month_selection()
        # do whatever you want here

    month = fields.Selection(
        selection=month_selection, string='Month',
        default=datetime.now().month, required=True)
person CZoellner    schedule 21.09.2017
comment
Спасибо за ваш ответ, но это не то, что я хочу. Когда я выбираю «Месяц1», как я могу отправить этот выбор в другое поле. Например, show_month = fields.Char(), и я хочу отправить «Month1» в show_month. Есть ли какой-нибудь метод, например, month.value или month.selection, что-то вроде этого для получения выбранного элемента? - person Serdar Eren; 21.09.2017