se instancia modelo en caso de no existir para Many2One
FossilOrigin-Name: 006f6a780ae0436649addd2abe89eb6a9bfc5ad573ee1a1835a8f65ab039fd26
This commit is contained in:
@@ -25,3 +25,17 @@ class Field:
|
||||
|
||||
if callable(call):
|
||||
return call(*args)
|
||||
|
||||
def _create_model(self, inst, name=None, model=None):
|
||||
try:
|
||||
return inst._fields[self.name]
|
||||
except KeyError:
|
||||
if model is not None:
|
||||
obj = model()
|
||||
else:
|
||||
obj = self.model()
|
||||
if name is not None:
|
||||
obj.__name__ = name
|
||||
self._set_namespace(obj, self.namespace, inst.__namespace__)
|
||||
inst._fields[self.name] = obj
|
||||
return obj
|
||||
|
||||
@@ -13,15 +13,11 @@ class Many2One(Field):
|
||||
if inst is None:
|
||||
return self
|
||||
assert self.name is not None
|
||||
return inst._fields[self.name]
|
||||
return self._create_model(inst)
|
||||
|
||||
def __set__(self, inst, value):
|
||||
assert self.name is not None
|
||||
class_model = self.model
|
||||
inst_model = class_model()
|
||||
|
||||
self._set_namespace(inst_model, self.namespace, inst.__namespace__)
|
||||
inst._fields[self.name] = inst_model
|
||||
inst_model = self._create_model(inst, model=self.model)
|
||||
|
||||
# si hay setter manual se ejecuta
|
||||
# de lo contrario se asigna como texto del elemento
|
||||
|
||||
@@ -10,20 +10,8 @@ class Model(Field):
|
||||
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):
|
||||
obj = self._create_model(inst)
|
||||
obj._set_content(value)
|
||||
|
||||
def _create_model(self, inst):
|
||||
try:
|
||||
return inst._fields[self.name]
|
||||
except KeyError:
|
||||
obj = self.model()
|
||||
if self.field_name is not None:
|
||||
obj.__name__ = self.field_name
|
||||
self._set_namespace(obj, self.namespace, inst.__namespace__)
|
||||
inst._fields[self.name] = obj
|
||||
return obj
|
||||
|
||||
obj = self._create_model(inst, name=self.field_name)
|
||||
obj._set_content(value)
|
||||
|
||||
Reference in New Issue
Block a user