Fix Feference field to work with non-relational value

The refactoring of changeset 0e4702844572 removed the management of
non-relational value for Reference fields.
This commit is contained in:
Cédric Krier committed 2012-02-07 18:29:56 +01:00
1 parent d116caa635
commit 57d2cd31b0
2 files changed
+28 -11

No files matched your search

+12 -7
View File
@@ -779,11 +779,13 @@ class ReferenceField(CharField):
return None
def set_client(self, record, value, force_change=False):
ref_model, ref_id = value
if isinstance(ref_id, (tuple, list)):
ref_id, rec_name = ref_id
record.value[self.name + '.rec_name'] = rec_name
super(ReferenceField, self).set_client(record, (ref_model, ref_id),
if value:
ref_model, ref_id = value
if isinstance(ref_id, (tuple, list)):
ref_id, rec_name = ref_id
record.value[self.name + '.rec_name'] = rec_name
value = (ref_model, ref_id)
super(ReferenceField, self).set_client(record, value,
force_change=force_change)
def set(self, record, value, modified=False):
@@ -795,7 +797,10 @@ class ReferenceField(CharField):
if not ref_id:
ref_id = None
else:
ref_id = int(ref_id)
try:
ref_id = int(ref_id)
except ValueError:
pass
else:
ref_model, ref_id = value
rec_name = record.value.get(self.name + '.rec_name') or ''
@@ -811,7 +816,7 @@ class ReferenceField(CharField):
return
rec_name = result['rec_name']
else:
rec_name = ''
rec_name = ref_id
record.value[self.name] = ref_model, ref_id
record.value[self.name + '.rec_name'] = rec_name
if modified:
@@ -82,8 +82,8 @@ class Reference(Many2One):
if self.record and self.field:
try:
model, name = self.field.get_client(self.record)
except ValueError:
model, name = None
except (ValueError, TypeError):
model, name = '', ''
return (model != self.get_model()
or name != self.wid_text.get_text())
return False
@@ -95,7 +95,10 @@ class Reference(Many2One):
if not value:
value = None
else:
value = int(value)
try:
value = int(value)
except ValueError:
value = None
result = model == self.get_model() and value >= 0
return result
@@ -116,8 +119,17 @@ class Reference(Many2One):
self.wid_text.set_position(0)
self.field.set_client(self.record, (self.get_model(), (-1, '')))
def set_value(self, record, field):
if not self.get_model():
value = self.wid_text.get_text()
return field.set_client(record, ('', value))
return super(Reference, self).set_value(record, field)
def set_text(self, value):
model, value = value
if value:
model, value = value
else:
model, value = None, None
super(Reference, self).set_text(value)
child = self.widget_combo.get_child()
if model: