Odoo 10选择字段的价值

时间:2017-09-20 14:04:39

标签: openerp field odoo-10 getvalue

如何在odoo 10中获得选择字段值?

std::function

我试过了,

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

也尝试了这个,但它没有用。 请帮助我,我找不到解决方案。

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以通过以下方式执行此操作:

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 ...

答案 1 :(得分:0)

我没有完全回答这个问题,但让我试着回答。为什么不将选择定义为方法并在两种情况下使用它:

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)