Files
tryton/trytond/tests/model.py
T
Cédric Krier d9b4d71a11 Ensure context is correctly set when initializing Model
We make the assignation twice if any field has a context defined. This ensures
that the context will be evaluated with all initialized values when
the target records will be instantiated.

issue8586
review282041002
2019-09-09 22:41:54 +02:00

170 lines
4.0 KiB
Python

# 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')
class ModelParent(Model):
"Model Parent"
__name__ = 'test.model_parent'
name = fields.Char("Name")
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 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,
Singleton,
URLObject,
Model4Union1,
Model4Union2,
Model4Union3,
Model4Union4,
Union,
UnionUnion,
Model4UnionTree1,
Model4UnionTree2,
UnionTree,
SequenceOrderedModel,
module=module, type_='model')