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:
1 parent
d116caa635
commit
57d2cd31b0
2 files changed
+28
-11
No files matched your search
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user