创建要继承的空选择

Create an empty selection to be inherited

我创建了一个父模型,它有一个选择字段。 此模式必须继承自提供服务的 classes,因此在子 classes 中我使用 fields.Selection(selection_add = ....)。是否可以在父 class 中创建一个“空”选择,该选择将仅填充继承它的模型的选择字段? 例如

class GenericService(models.Model):
_name = 'generic.service'
selection_type = fields.Selection(
[('select_type', _("Select an Account")),],default='select_type',                                                                                                                                                                                                                                              
    string=_("Service Type"),                                         
    required=True   

class SpecificService(model.Model):
_inherit = 'generic.service'

  selection_type = fields.Selection(
        selection_add=[('sftp','SFTP')],
    )

我想避免在通用模型选择上添加默认字段,我的替代方法是创建一个控制插入的方法,但我想知道是否可以避免。

如果你像那样继承_inherit without _name。然后你最终只有 1 个模型 generic.service 和所有 selection_add=[] 添加的选择。

如果你添加

class GenericService(models.Model):
_name = 'generic.service'
 selection_types = fields.Selection([], string="Service Type")
  

class SpecificServiceA(model.Model):
_inherit = 'generic.service'

  selection_type = fields.Selection(
        selection_add=[('sftp','SFTP')], required=True
    )
class SpecificServiceB(model.Model):
_inherit = 'generic.service'

  selection_type = fields.Selection(
        selection_add=[('https','HTTPS')], required=True
    )

你最终得到名为 "generic.service" 的模型和选择 [('sftp','SFTP'), ('https','HTTPS')]

我相信字符串和选择名称会自动添加到翻译列表中。不需要 _()

你也可以使用Odoo的mixin特性,有点像abstracttypes/classes。按照您的要求举例:

class ServiceMixin(models.AbstractModel):
    _name = "service.mixin"
    
    def _get_type_selection(self):
        """ Returns a 2-tuple list for type_selection field
        
            Meant to be extended by inheriting models."""
        return []
    
    type_selection = fields.Selection(
        selection="_get_type_selection", string="Type")

class ServiceA(models.Model):
    _name = "service.a"
    _inherit = ["service.mixin"]
    
    def _get_type_selection(self):
        """ Returns a 2-tuple list for type_selection field"""
        return [('a', 'A'), ('b', 'B')]

class ServiceB(models.Model):
    _name = "service.b"
    _inherit = ["service.mixin"]
    
    def _get_type_selection(self):
        """ Returns a 2-tuple list for type_selection field"""
        return [('a', 'A'), ('c', 'C')]

在数据库中将生成 2 个新表:service_aservice_b。所以你真的有 2 个新的 Odoo 模型,它们彼此不依赖。