Files
tradon/tests/model.py
2025-12-26 13:11:43 +00:00

194 lines
4.6 KiB
Python
Executable File

# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.model import (
ModelSingleton, ModelSQL, UnionMixin, fields, sequence_ordered)
from trytond.pool import Pool
from trytond.pyson import Eval
class Model(ModelSQL):
'Model'
__name__ = 'test.model'
name = fields.Char('Name')
selection = fields.Selection([
('foo', "Foo"),
('bar', "Bar"),
(None, ""),
], "Selection")
multiselection = fields.MultiSelection([
('foo', "Foo"),
('bar', "Bar"),
], "MultiSelection")
class ModelParent(Model):
"Model Parent"
__name__ = 'test.model_parent'
name = fields.Char("Name")
children = fields.One2Many('test.model_child', 'parent', "Children")
class ModelChild(Model):
"Model Child"
__name__ = 'test.model_child'
name = fields.Char("Name")
parent = fields.Many2One('test.model_parent', "Parent")
class ModelChildChild(Model):
"Model Child Child"
__name__ = 'test.model_child_child'
name = fields.Char("Name")
parent = fields.Many2One('test.model_child', "Parent")
class ModelContext(Model):
"Model with contextual field"
__name__ = 'test.model_context'
name = fields.Char("Name")
target = fields.Many2One(
'test.model', "Target",
context={
'name': Eval('name'),
})
class ModelContextParent(Model):
"Model with contextual field from _parent"
__name__ = 'test.model_context_parent'
parent = fields.Many2One('test.model', "Parent")
target = fields.Many2One(
'test.model', "Target",
context={
'name': Eval('_parent_parent', {}).get('name'),
})
class ModelDefault(Model):
"Model with default"
__name__ = 'test.model.default'
name = fields.Char("Name")
description = fields.Char("Description")
target = fields.Many2One('test.model', "Target")
@classmethod
def default_description(cls):
return "Test"
class Singleton(ModelSingleton, ModelSQL):
'Singleton'
__name__ = 'test.singleton'
name = fields.Char('Name')
@staticmethod
def default_name():
return 'test'
class URLObject(ModelSQL):
'URLObject'
__name__ = 'test.urlobject'
name = fields.Char('Name')
class Model4Union1(ModelSQL):
'Model for union 1'
__name__ = 'test.model.union1'
name = fields.Char('Name')
optional = fields.Char('Optional')
class Model4Union2(ModelSQL):
'Model for union 2'
__name__ = 'test.model.union2'
name = fields.Char('Name')
class Model4Union3(ModelSQL):
'Model for union 3'
__name__ = 'test.model.union3'
name = fields.Char('Name')
class Model4Union4(ModelSQL):
'Model for union 4'
__name__ = 'test.model.union4'
name = fields.Char('Name')
class Union(UnionMixin, ModelSQL):
'Union'
__name__ = 'test.union'
name = fields.Char('Name')
optional = fields.Char('Optional')
@staticmethod
def union_models():
return ['test.model.union%s' % i for i in range(1, 4)]
class UnionUnion(UnionMixin, ModelSQL):
'Union of union'
__name__ = 'test.union.union'
name = fields.Char('Name')
@staticmethod
def union_models():
return ['test.union', 'test.model.union4']
class Model4UnionTree1(ModelSQL):
'Model for union tree 1'
__name__ = 'test.model.union.tree1'
name = fields.Char('Name')
class Model4UnionTree2(ModelSQL):
'Model for union tree 2'
__name__ = 'test.model.union.tree2'
name = fields.Char('Name')
parent = fields.Many2One('test.model.union.tree1', 'Parent')
class UnionTree(UnionMixin, ModelSQL):
'Union tree'
__name__ = 'test.union.tree'
name = fields.Char('Name')
parent = fields.Many2One('test.union.tree', 'Parent')
childs = fields.One2Many('test.union.tree', 'parent', 'Childs')
@staticmethod
def union_models():
return ['test.model.union.tree1', 'test.model.union.tree2']
class SequenceOrderedModel(sequence_ordered(), ModelSQL):
'Sequence Ordered Model'
__name__ = 'test.order.sequence'
def register(module):
Pool.register(
Model,
ModelParent,
ModelChild,
ModelChildChild,
ModelContext,
ModelContextParent,
ModelDefault,
Singleton,
URLObject,
Model4Union1,
Model4Union2,
Model4Union3,
Model4Union4,
Union,
UnionUnion,
Model4UnionTree1,
Model4UnionTree2,
UnionTree,
SequenceOrderedModel,
module=module, type_='model')