app/soc/views/helper/templatetags/forms_helpers.py
changeset 1229 ec3768cbf369
parent 1214 7fb705534dd1
child 1271 3bd4a3b527d7
--- a/app/soc/views/helper/templatetags/forms_helpers.py	Thu Feb 05 23:46:39 2009 +0000
+++ b/app/soc/views/helper/templatetags/forms_helpers.py	Thu Feb 05 23:49:46 2009 +0000
@@ -31,6 +31,8 @@
 from django.utils.encoding import force_unicode
 from django.utils.html import escape
 
+from soc.views.helper import widgets
+
 
 register = template.Library()
 
@@ -171,10 +173,10 @@
   # Iterate over all fields and prepare it for adding 
   for name, field in form.fields.items():
     bf = forms_in.BoundField(form, field, name)
-    reference = None
+    attrs = {}
 
-    if name.endswith('_link_id'):
-      reference = get_reference_url(form, name[:-8])
+    if isinstance(field, widgets.ReferenceField):
+      attrs = field.rf
 
     # If the field is hidden we display it elsewhere
     if not bf.is_hidden:
@@ -182,7 +184,7 @@
       if hasattr(field, 'example_text'):
         example_text = force_unicode(field.example_text)
 
-      item = (bf, field.required, example_text, reference)
+      item = (bf, field.required, example_text, attrs)
       fields.append(item)
     else:
       hidden_fields.append(unicode(bf))
@@ -226,7 +228,7 @@
   return as_table_row_helper(context, field, required, example_text, reference)
 
 
-def as_table_row_helper(context, field, required, example_text, reference):
+def as_table_row_helper(context, field, required, example_text, attrs):
   """See as_table_row().
   """
 
@@ -236,14 +238,23 @@
   form = context['form']
   entity = context['entity']
 
+  reference = attrs.get('reference_url')
+  filter = attrs.get('filter')
+
   if reference:
     from soc.views.helper import redirects
     params = {
         'url_name': reference,
-        'field_name': field.name,
-        'return_url': context['return_url']
         }
-    select_url = redirects.getSelectRedirect(entity, params)
+
+    if entity:
+      args = {}
+      for filter_field in (i for i in filter if hasattr(entity, i)):
+        args[filter_field] = getattr(entity, filter_field)
+
+      params['args'] = '&'.join(['%s=%s' % item for item in args.iteritems()])
+
+    select_url = redirects.getSelectRedirect(params)
 
   if field.label:
     label = escape(force_unicode(field.label))