oc-facho/facho/model/fields/field.py
bit4bit 92bae58e51 se instancia modelo en caso de no existir para Many2One
FossilOrigin-Name: 006f6a780ae0436649addd2abe89eb6a9bfc5ad573ee1a1835a8f65ab039fd26
2021-06-24 01:51:05 +00:00

42 lines
1.2 KiB
Python

class Field:
def __set_name__(self, owner, name):
self.name = name
def __get__(self, inst, cls):
if inst is None:
return self
assert self.name is not None
return inst._fields[self.name]
def __set__(self, inst, value):
assert self.name is not None
inst._fields[self.name] = value
def _set_namespace(self, inst, name, namespaces):
if name is None:
return
if name not in namespaces:
raise KeyError("namespace %s not found" % (name))
inst._namespace_prefix = name
def _call(self, inst, method, *args):
call = getattr(inst, method or '', None)
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