Remove domain constraint and use new domain evaluation
This commit is contained in:
1 parent
273ef7fd62
commit
9f9573ad00
5 files changed
+23
-32
No files matched your search
@@ -383,7 +383,7 @@ class O2MField(CharField):
|
||||
def set(self, model, value, modified=False):
|
||||
from group import ModelRecordGroup
|
||||
mod = ModelRecordGroup(self.attrs['relation'], {}, model.window,
|
||||
parent=model)
|
||||
parent=model, parent_name=self.attrs.get('relation_field', ''))
|
||||
mod.signal_connect(mod, 'model-changed', self._model_changed)
|
||||
model.value[self.name] = mod
|
||||
#self.internal.signal_connect(self.internal, 'model-changed',
|
||||
|
||||
@@ -71,11 +71,12 @@ class ModelList(list):
|
||||
|
||||
class ModelRecordGroup(SignalEvent):
|
||||
|
||||
def __init__(self, resource, fields, window, ids=None, parent=None, context=None,
|
||||
readonly=False):
|
||||
def __init__(self, resource, fields, window, ids=None, parent=None,
|
||||
parent_name='', context=None, readonly=False):
|
||||
super(ModelRecordGroup, self).__init__()
|
||||
self.window = window
|
||||
self.parent = parent
|
||||
self.parent_name = parent_name
|
||||
self._context = context or {}
|
||||
self.resource = resource
|
||||
self.rpc = RPCProxy(resource)
|
||||
@@ -156,7 +157,7 @@ class ModelRecordGroup(SignalEvent):
|
||||
newmods = []
|
||||
for id in ids:
|
||||
newmod = ModelRecord(self.resource, id, self.window,
|
||||
parent=self.parent, group=self)
|
||||
parent=self.parent, parent_name=self.parent_name, group=self)
|
||||
self.models.append(newmod)
|
||||
newmods.append(newmod)
|
||||
newmod.signal_connect(self, 'record-changed', self._record_changed)
|
||||
@@ -221,6 +222,7 @@ class ModelRecordGroup(SignalEvent):
|
||||
self.models.insert(position, model)
|
||||
self.current_idx = position
|
||||
model.parent = self.parent
|
||||
model.parent_name = self.parent_name
|
||||
model.window = self.window
|
||||
if modified:
|
||||
model.modified = True
|
||||
@@ -245,7 +247,7 @@ class ModelRecordGroup(SignalEvent):
|
||||
|
||||
def model_new(self, default=True, domain=None, context=None):
|
||||
newmod = ModelRecord(self.resource, None, self.window, group=self,
|
||||
parent=self.parent, new=True)
|
||||
parent=self.parent, parent_name=self.parent_name, new=True)
|
||||
newmod.signal_connect(self, 'record-changed', self._record_changed)
|
||||
newmod.signal_connect(self, 'record-modified', self._record_modified)
|
||||
if default:
|
||||
|
||||
@@ -17,7 +17,7 @@ class EvalEnvironment(object):
|
||||
self.check_load = check_load
|
||||
|
||||
def __getattr__(self, item):
|
||||
if item == 'parent' and self.parent.parent:
|
||||
if item == '_parent_' + self.parent.parent_name and self.parent.parent:
|
||||
return EvalEnvironment(self.parent.parent)
|
||||
return self.parent.get_eval(check_load=self.check_load)[item]
|
||||
|
||||
@@ -27,7 +27,8 @@ class ModelRecord(SignalEvent):
|
||||
id = -1
|
||||
|
||||
|
||||
def __init__(self, resource, obj_id, window, group=None, parent=None, new=False ):
|
||||
def __init__(self, resource, obj_id, window, group=None, parent=None,
|
||||
parent_name='', new=False):
|
||||
global ID_COUNT
|
||||
super(ModelRecord, self).__init__()
|
||||
self.window = window
|
||||
@@ -38,6 +39,7 @@ class ModelRecord(SignalEvent):
|
||||
ModelRecord.id -= 1
|
||||
self._loaded = False
|
||||
self.parent = parent
|
||||
self.parent_name = parent_name
|
||||
self.mgroup = group
|
||||
self.value = {}
|
||||
self.state_attrs = {}
|
||||
@@ -296,8 +298,9 @@ class ModelRecord(SignalEvent):
|
||||
ctx['time'] = time
|
||||
ctx['context'] = self.context_get()
|
||||
ctx['active_id'] = self.id
|
||||
if self.parent:
|
||||
ctx['parent'] = EvalEnvironment(self.parent, check_load)
|
||||
if self.parent and self.parent_name:
|
||||
ctx['_parent_' + self.parent_name] = EvalEnvironment(self.parent,
|
||||
check_load)
|
||||
val = eval(dom, ctx)
|
||||
return val
|
||||
|
||||
|
||||
@@ -16,9 +16,9 @@ class Screen(SignalEvent):
|
||||
"Screen"
|
||||
|
||||
def __init__(self, model_name, window, view_ids=None, view_type=None,
|
||||
parent=None, context=None, views_preload=None, tree_saves=True,
|
||||
domain=None, create_new=False, row_activate=None, hastoolbar=False,
|
||||
default_get=None, show_search=False, limit=None,
|
||||
parent=None, parent_name='', context=None, views_preload=None,
|
||||
tree_saves=True, domain=None, create_new=False, row_activate=None,
|
||||
hastoolbar=False, default_get=None, show_search=False, limit=None,
|
||||
readonly=False, form=None, exclude_field=None, sort=None,
|
||||
search_value=None):
|
||||
if view_ids is None:
|
||||
@@ -58,9 +58,10 @@ class Screen(SignalEvent):
|
||||
self.view_ids = view_ids
|
||||
self.models = None
|
||||
self.parent = parent
|
||||
self.parent_name = parent_name
|
||||
self.window = window
|
||||
models = ModelRecordGroup(model_name, self.fields, self.window,
|
||||
parent=self.parent, context=self.context,
|
||||
parent=self.parent, parent_name=parent_name, context=self.context,
|
||||
readonly=readonly)
|
||||
self.models_set(models)
|
||||
self.current_model = None
|
||||
@@ -164,6 +165,7 @@ class Screen(SignalEvent):
|
||||
self.models.signal_unconnect(self.models)
|
||||
self.models = models
|
||||
self.parent = models.parent
|
||||
self.parent_name = models.parent_name
|
||||
if len(models.models):
|
||||
self.current_model = models.models[0]
|
||||
else:
|
||||
@@ -326,7 +328,6 @@ class Screen(SignalEvent):
|
||||
else:
|
||||
self.models.add_fields(fields, self.models, context=context)
|
||||
|
||||
self.set_domain()
|
||||
self.fields = self.models.fields
|
||||
|
||||
parser = WidgetParse(parent=self.parent, window=self.window)
|
||||
@@ -340,23 +341,6 @@ class Screen(SignalEvent):
|
||||
self.screen_container.set(view.widget)
|
||||
return view
|
||||
|
||||
def set_domain(self):
|
||||
fields = self.models.fields
|
||||
for dom in self.domain:
|
||||
#XXX to improve for new domain structure
|
||||
if not isinstance(dom, tuple):
|
||||
continue
|
||||
if dom[0] in fields:
|
||||
field_dom = str(fields[dom[0]].setdefault('domain',[]))
|
||||
if dom[1] == 'child_of':
|
||||
fields[dom[0]]['domain'] = field_dom[:1] + \
|
||||
str((dom[0], dom[1], dom[2])) + ',' + field_dom[1:]
|
||||
else:
|
||||
fields[dom[0]]['domain'] = field_dom[:1] + \
|
||||
str(('id', dom[1], dom[2])) + ',' + field_dom[1:]
|
||||
if dom[1] == '=':
|
||||
fields[dom[0]]['readonly'] = True
|
||||
|
||||
def editable_get(self):
|
||||
if hasattr(self.current_view, 'widget_tree'):
|
||||
if hasattr(self.current_view.widget_tree, 'editable'):
|
||||
|
||||
@@ -200,6 +200,7 @@ class Dialog(object):
|
||||
self.dia.show()
|
||||
|
||||
self.screen = Screen(model_name, self.dia, view_type=[], parent=parent,
|
||||
parent_name=attrs.get('relation_field'),
|
||||
exclude_field=attrs.get('relation_field', None), readonly=readonly,
|
||||
domain=domain)
|
||||
self.screen.models._context.update(model_ctx)
|
||||
@@ -460,7 +461,8 @@ class One2Many(WidgetInterface):
|
||||
|
||||
self.screen = Screen(attrs['relation'], self._window,
|
||||
view_type=attrs.get('mode','tree,form').split(','),
|
||||
parent=self.parent, views_preload=attrs.get('views', {}),
|
||||
parent=self.parent, parent_name=attrs.get('relation_field'),
|
||||
views_preload=attrs.get('views', {}),
|
||||
tree_saves=attrs.get('saves', False), create_new=True,
|
||||
row_activate=self._on_activate,
|
||||
default_get=attrs.get('default_get', {}),
|
||||
|
||||
Reference in new issue
Block a user