23 lines
953 B
Python
23 lines
953 B
Python
|
from django import forms
|
||
|
from django.core.exceptions import FieldError
|
||
|
from django.template.loader import get_template
|
||
|
from django.utils.safestring import mark_safe
|
||
|
|
||
|
|
||
|
class CheckboxSelectMultipleWithSelectAll(forms.CheckboxSelectMultiple):
|
||
|
def render(self, name, value, attrs=None, renderer=None):
|
||
|
if 'id' not in attrs:
|
||
|
raise FieldError('id required')
|
||
|
|
||
|
select_all_id = attrs['id'] + '_all'
|
||
|
select_all_name = name + '_all'
|
||
|
original = super(CheckboxSelectMultipleWithSelectAll, self).render(name, value, attrs, renderer)
|
||
|
template = get_template('widgets/select_all.html')
|
||
|
return mark_safe(template.render({
|
||
|
'original_widget': original,
|
||
|
'select_all_id': select_all_id,
|
||
|
'select_all_name': select_all_name,
|
||
|
'all_selected': all(choice[0] in value for choice in self.choices) if value else False,
|
||
|
'empty': not self.choices,
|
||
|
}))
|