Author: clong
Date: 2006-08-18 09:23:57 -0500 (Fri, 18 Aug 2006)
New Revision: 3610
Modified:
django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py
Log:
[per-object-permissions] Renders multiple object select field using optgroup to
separate the types of objects
Modified:
django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py
===================================================================
---
django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py
2006-08-18 14:06:02 UTC (rev 3609)
+++
django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py
2006-08-18 14:23:57 UTC (rev 3610)
@@ -56,7 +56,7 @@
obj_list.extend([('group', Group.objects.order_by("name"))])
perm_list = [(o.id, o.name) for o in
self.ct.permission_set.order_by("name")]
self.fields = (
- MultipleObjSelectField(field_name="owner", obj_list=obj_list),
+ MultipleObjSelectField(field_name="owner", obj_list=obj_list,
default_text=_("Select an option")),
forms.SelectMultipleField(field_name="perm", choices=perm_list,
size=3),
forms.CheckboxField(field_name="negative"),
)
@@ -109,25 +109,51 @@
def __init__(self, field_name, obj_list=None,
default_text=None, size=1, is_required=False,
validator_list=None,
member_name=None):
- if default_text is None:
- default_text = "Select an option"
- choice_list = [('', default_text)]
+ choice_list = []
+ self.default_text = default_text
for obj, obj_choices in obj_list:
ct = ContentType.objects.get(model__exact=obj)
- choice_list.extend([(MultipleObjSelectField.returnKey(o), str(o)+"
("+ct.name.title()+")") for o in obj_choices])
-
+ object_choice = [(MultipleObjSelectField.returnKey(o, ct=ct),
str(o)) for o in obj_choices]
+ choice_list.extend([(ct.name.title(), object_choice)])
+ #choice_list.extend([(MultipleObjSelectField.returnKey(o, ct=ct),
str(o)+" ("+ct.name.title()+")") for o in obj_choices])
+ print choice_list
super(MultipleObjSelectField, self).__init__(field_name,
choices=choice_list,
size=size,
is_required=is_required,
validator_list=validator_list,
member_name=member_name)
+ def render(self, data):
+ from django.utils.html import escape
+ output = ['<select id="%s" class="v%s%s" name="%s" size="%s">' % \
+ (self.get_id(), self.__class__.__name__,
+ self.is_required and ' required' or '', self.field_name,
self.size)]
+ str_data = str(data) # normalize to string
+
+ if self.default_text:
+ selected_html = ''
+ if not str_data:
+ selected_html = ' selected="selected"'
+ output.append(' <option %s>%s</option>' % (selected_html,
escape(self.default_text)))
+
+ for obj, obj_choices in self.choices:
+ output.append(' <optgroup label="%s">' % (obj,))
+ for value, display_name in obj_choices:
+ selected_html = ''
+ if str(value) == str_data:
+ selected_html = ' selected="selected"'
+ output.append(' <option value="%s"%s>%s</option>' %
(escape(value), selected_html, escape(display_name)))
+ output.append(' </optgroup>')
+ output.append(' </select>')
+ return '\n'.join(output)
+
def returnObject(data):
data = data.split('-')
ct = ContentType.objects.get(model__exact=data[0])
obj = ct.get_object_for_this_type(pk=data[1])
return obj
- def returnKey(obj):
- ct = ContentType.objects.get_for_model(obj.__class__)
+ def returnKey(obj, ct=None):
+ if not ct:
+ ct = ContentType.objects.get_for_model(obj.__class__)
return ct.model+"-"+str(obj.id)
returnObject = staticmethod(returnObject)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates
-~----------~----~----~----~------~----~------~--~---