我创建了一个父模型,它有一个Selection字段。这个模式必须从提供服务的类继承,所以在子类中我使用字段。Selection(Selection\uadd=….(。是否可以在父类中创建一个";"空";将只填充继承它的模型的选择字段的选择?Ex
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而不使用_name。然后您只得到一个型号的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功能,它有点像抽象类型/类。根据您的需求,举一个例子:
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')]
在将导致两个新表的数据库中:service_a
和service_b
。所以你有两款新的奥多奥车型,它们并不相互依赖。