diff --git a/facho/model/fields/many2one.py b/facho/model/fields/many2one.py index 1f6670c..0ead219 100644 --- a/facho/model/fields/many2one.py +++ b/facho/model/fields/many2one.py @@ -1,23 +1,21 @@ from .field import Field class Many2One(Field): - def __init__(self, model, setter=None, namespace=None): + def __init__(self, model, name=None, setter=None, namespace=None): self.model = model self.setter = setter self.namespace = namespace - - def __set_name__(self, owner, name): - self.name = name + self.field_name = name def __get__(self, inst, cls): if inst is None: return self assert self.name is not None - return self._create_model(inst) + return self._create_model(inst, name=self.field_name) def __set__(self, inst, value): assert self.name is not None - inst_model = self._create_model(inst, model=self.model) + inst_model = self._create_model(inst, name=self.field_name, model=self.model) # si hay setter manual se ejecuta # de lo contrario se asigna como texto del elemento diff --git a/facho/model/fields/model.py b/facho/model/fields/model.py index 7ae217a..ad48212 100644 --- a/facho/model/fields/model.py +++ b/facho/model/fields/model.py @@ -1,11 +1,13 @@ from .field import Field +import warnings class Model(Field): def __init__(self, model, name=None, namespace=None): self.model = model self.namespace = namespace self.field_name = name - + warnings.warn('deprecated use Many2One instead') + def __get__(self, inst, cls): if inst is None: return self diff --git a/tests/test_model.py b/tests/test_model.py index fb2a30c..220a4ec 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -103,13 +103,28 @@ def test_field_model(): class Person(facho.model.Model): __name__ = 'Person' - id = fields.Model(ID) + id = fields.Many2One(ID) person = Person() person.id = ID() person.id = 33 assert "33" == person.to_xml() +def test_field_multiple_model(): + class ID(facho.model.Model): + __name__ = 'ID' + + class Person(facho.model.Model): + __name__ = 'Person' + + id = fields.Many2One(ID) + id2 = fields.Many2One(ID) + + person = Person() + person.id = 33 + person.id2 = 44 + assert "3344" == person.to_xml() + def test_field_model_failed_initialization(): class ID(facho.model.Model): __name__ = 'ID' @@ -117,7 +132,7 @@ def test_field_model_failed_initialization(): class Person(facho.model.Model): __name__ = 'Person' - id = fields.Model(ID) + id = fields.Many2One(ID) person = Person() @@ -131,7 +146,7 @@ def test_field_model_with_custom_name(): class Person(facho.model.Model): __name__ = 'Person' - id = fields.Model(ID, name='DID') + id = fields.Many2One(ID, name='DID') person = Person() @@ -147,7 +162,7 @@ def test_field_model_default_initialization_with_attributes(): class Person(facho.model.Model): __name__ = 'Person' - id = fields.Model(ID) + id = fields.Many2One(ID) person = Person() person.id = 33 @@ -189,7 +204,7 @@ def test_field_model_with_namespace(): __namespace__ = { "facho": "http://lib.facho.cyou" } - id = fields.Model(ID, namespace="facho") + id = fields.Many2One(ID, namespace="facho") person = Person() @@ -203,7 +218,7 @@ def test_field_hook_before_xml(): class Person(facho.model.Model): __name__ = 'Person' - hash = fields.Model(Hash) + hash = fields.Many2One(Hash) def __before_xml__(self): self.hash = "calculate"