Handle datetime_field in xxx2Many
This commit is contained in:
1 parent
a475d88081
commit
05d1d3d81b
5 files changed
+26
-6
No files matched your search
@@ -1,3 +1,4 @@
|
||||
* Handle datetime_field in xxx2Many
|
||||
* Add new safe_eval
|
||||
* Ask previous password for set_preferences on password change
|
||||
* Add "Statusbar" option
|
||||
|
||||
@@ -460,7 +460,8 @@ class O2MField(CharField):
|
||||
from group import ModelRecordGroup
|
||||
mod = ModelRecordGroup(self.attrs['relation'], {}, model.window,
|
||||
parent=model, parent_name=self.attrs.get('relation_field', ''),
|
||||
context=self.context)
|
||||
context=self.context,
|
||||
parent_datetime_field=self.attrs.get('datetime_field'))
|
||||
mod.signal_connect(mod, 'model-changed', self._model_changed)
|
||||
return mod
|
||||
|
||||
@@ -518,7 +519,8 @@ class O2MField(CharField):
|
||||
from group import ModelRecordGroup
|
||||
mod = ModelRecordGroup(self.attrs['relation'], {}, model.window,
|
||||
parent=model, parent_name=self.attrs.get('relation_field', ''),
|
||||
context=self.context)
|
||||
context=self.context,
|
||||
parent_datetime_field=self.attrs.get('datetime_field'))
|
||||
mod.signal_connect(mod, 'model-changed', self._model_changed)
|
||||
model.value[self.name] = mod
|
||||
#self.internal.signal_connect(self.internal, 'model-changed',
|
||||
@@ -550,7 +552,8 @@ class O2MField(CharField):
|
||||
model.value[self.name] = ModelRecordGroup(
|
||||
self.attrs['relation'], fields, model.window, parent=model,
|
||||
parent_name=self.attrs.get('relation_field', ''),
|
||||
context=self.context)
|
||||
context=self.context,
|
||||
parent_datetime_field=self.attrs.get('datetime_field'))
|
||||
model.value[self.name].signal_connect(model.value[self.name],
|
||||
'model-changed', self._model_changed)
|
||||
mod = None
|
||||
|
||||
@@ -73,11 +73,13 @@ class ModelList(list):
|
||||
class ModelRecordGroup(SignalEvent):
|
||||
|
||||
def __init__(self, resource, fields, window, ids=None, parent=None,
|
||||
parent_name='', context=None, readonly=False):
|
||||
parent_name='', context=None, readonly=False,
|
||||
parent_datetime_field=None):
|
||||
super(ModelRecordGroup, self).__init__()
|
||||
self.window = window
|
||||
self.parent = parent
|
||||
self.parent_name = parent_name
|
||||
self.parent_datetime_field = parent_datetime_field
|
||||
self._context = context or {}
|
||||
self.resource = resource
|
||||
self.rpc = RPCProxy(resource)
|
||||
@@ -223,6 +225,9 @@ class ModelRecordGroup(SignalEvent):
|
||||
def _get_context(self):
|
||||
ctx = rpc.CONTEXT.copy()
|
||||
ctx.update(self._context)
|
||||
if self.parent_datetime_field:
|
||||
ctx['_datetime'] = self.parent.get_eval(check_load=False)\
|
||||
[self.parent_datetime_field]
|
||||
return ctx
|
||||
context = property(_get_context)
|
||||
|
||||
|
||||
@@ -146,7 +146,17 @@ class Many2Many(WidgetInterface):
|
||||
ids = []
|
||||
if model_field:
|
||||
ids = model_field.get_client(model)
|
||||
if ids != self.old:
|
||||
reload = False
|
||||
if self.attrs.get('datetime_field'):
|
||||
datetime_field = model.get_eval(check_load=False)\
|
||||
[self.attrs['datetime_field']]
|
||||
if self.screen.context.get('_datetime') != datetime_field:
|
||||
self.screen.context['_datetime'] = datetime_field
|
||||
reload = True
|
||||
if self.screen.models.context.get('_datetime') != datetime_field:
|
||||
self.screen.models._context['_datetime'] = datetime_field
|
||||
reload = True
|
||||
if ids != self.old or reload:
|
||||
self.screen.clear()
|
||||
self.screen.load(ids, set_cursor=False)
|
||||
self.old = ids
|
||||
|
||||
@@ -579,7 +579,8 @@ class One2Many(WidgetInterface):
|
||||
domain = modelfield.domain_get(self._view.model)
|
||||
dia = Dialog(self.attrs['relation'], parent=self._view.model,
|
||||
model=self.screen.current_model, attrs=self.attrs,
|
||||
window=self._window, readonly=readonly, domain=domain)
|
||||
window=self._window, readonly=readonly, domain=domain,
|
||||
model_ctx=self.screen.models.context)
|
||||
res, value = dia.run()
|
||||
dia.destroy()
|
||||
|
||||
|
||||
Reference in new issue
Block a user