el uso de __default_set__ y __default_get__ facilitan la creacion de un objeto como tipo
FossilOrigin-Name: e7fa7e3a3b312ad6b88a85b508b496308e5bb54b1d51ab5d50f4d4207830f175
This commit is contained in:
		| @@ -25,8 +25,10 @@ class Many2One(Field): | ||||
|         # se puede obtener directamente un valor indicado por el modelo | ||||
|         if hasattr(value, '__default_get__'): | ||||
|             return value.__default_get__(self.name, value) | ||||
|         else: | ||||
|         elif hasattr(inst, '__default_get__'): | ||||
|             return inst.__default_get__(self.name, value) | ||||
|         else: | ||||
|             return value | ||||
|          | ||||
|     def __set__(self, inst, value): | ||||
|         assert self.name is not None | ||||
|   | ||||
| @@ -13,12 +13,21 @@ class _RelationProxy(): | ||||
|         if (name in self.__dict__): | ||||
|             return self.__dict__[name] | ||||
|  | ||||
|         return getattr(self.__dict__['_obj'], name) | ||||
|         rel = getattr(self.__dict__['_obj'], name) | ||||
|         if hasattr(rel, '__default_get__'): | ||||
|             return rel.__default_get__(name, rel) | ||||
|  | ||||
|         return rel | ||||
|  | ||||
|     def __setattr__(self, attr, value): | ||||
|         # TODO(bit4bit) hacemos proxy al sistema de notificacion de cambios | ||||
|         # algo burdo, se usa __dict__ para saltarnos el __getattr__ y generar un fallo por recursion | ||||
|         response = setattr(self._obj, attr, value) | ||||
|         # algo burdo, se usa __dict__ para saltarnos el __getattr__ y evitar un fallo por recursion | ||||
|         rel = getattr(self.__dict__['_obj'], attr) | ||||
|         if hasattr(rel, '__default_set__'): | ||||
|             response = setattr(self._obj, attr, rel.__default_set__(value)) | ||||
|         else: | ||||
|             response = setattr(self._obj, attr, value) | ||||
|  | ||||
|         for fun in self.__dict__['_inst']._on_change_fields[self.__dict__['_attribute']]: | ||||
|             fun(self.__dict__['_inst'], self.__dict__['_attribute'], value) | ||||
|         return response | ||||
|   | ||||
		Reference in New Issue
	
	Block a user