From 72a60f52462eacdf1ba6e46d91fc3bf217d3487f Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Fri, 21 May 2010 16:12:00 +0000
Subject: [PATCH] Recursively search the editable_field in the field libraries.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@35540 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Form/ListBox.py | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/product/ERP5Form/ListBox.py b/product/ERP5Form/ListBox.py
index 981c5715ad..4e85fb6128 100644
--- a/product/ERP5Form/ListBox.py
+++ b/product/ERP5Form/ListBox.py
@@ -41,7 +41,7 @@ from Products.CMFCore.utils import getToolByName
 from Products.ZSQLCatalog.zsqlbrain import ZSQLBrain
 from Products.ERP5Type.Message import Message
 
-from Acquisition import aq_base, aq_self
+from Acquisition import aq_base, aq_self, aq_inner
 import Acquisition
 from zLOG import LOG, WARNING
 from ZODB.POSException import ConflictError
@@ -1207,16 +1207,22 @@ class ListBoxRenderer:
     """
     form = self.getForm()
     editable_field_id = '%s_%s' % (self.getUnprefixedId(), alias)
-    if form.has_field(editable_field_id, include_disabled=1):
-      return form.get_field(editable_field_id, include_disabled=1)
-
-    # if we are rendering a proxy field, also look for editable fields from the
-    # template field's form.
-    if self.field.has_value('form_id'):
-      form = getattr(self.field, self.field.get_value('form_id'), None)
-      if form and form.has_field(editable_field_id, include_disabled=1):
+    field = self.field
+    while form is not None:
+      #Search the editable field in the form
+      if form.has_field(editable_field_id, include_disabled=1):
         return form.get_field(editable_field_id, include_disabled=1)
-
+      elif field.meta_type == 'ProxyField':
+        # if we are rendering a proxy field, also look for editable 
+        # fields from the template field's form.
+        field = field.getTemplateField()
+        if field is None:
+          form = None
+        else:
+          form = aq_inner(field).aq_parent
+      else:
+        form = None
+    
     return None
 
   def getListMethod(self):
-- 
2.30.9