创建要继承的空选择
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_a
和 service_b
。所以你真的有 2 个新的 Odoo 模型,它们彼此不依赖。
我创建了一个父模型,它有一个选择字段。 此模式必须继承自提供服务的 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_a
和 service_b
。所以你真的有 2 个新的 Odoo 模型,它们彼此不依赖。