代码之家  ›  专栏  ›  技术社区  ›  Serdar Eren

Odoo 10选择字段值

  •  3
  • Serdar Eren  · 技术社区  · 7 年前

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

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

    请帮帮我,我找不到解决办法。

    非常感谢。

    2 回复  |  直到 7 年前
        1
  •  4
  •   tidylobster    7 年前

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

    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 ...
    
        2
  •  0
  •   CZoellner    7 年前

    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)