Я использую виджет FilteredSelectMultiple
от Django Admin. Моя форма в настоящее время выглядит примерно так (у меня есть некоторые названия для SO, но она работает):
class SelectExampleForm(forms.Form):
class Media:
css = {'all': ('/static/widgets.css',), }
js = ('/static/jsi18n.js',)
def __init__(self, *args, **kwargs):
group_name = kwargs.pop('group_name')
location = kwargs.pop('location')
r = super(SelectExampleForm, self).__init__(
*args, **kwargs)
# total pool of choices
qs = Employee.objects.filter(
group__name=group_name, town=location
)
# Currently selected choices
current = Employee.objects.filter(
group__name=group_name, town=location, attendance__isnull=False
)
# populating the widget ...
self.fields['personnel'] = \
forms.ModelMultipleChoiceField(
queryset=qs,
widget=FilteredSelectMultiple(
'Employee', is_stacked=False),
label='',
initial=current,
show_hidden_initial=True
)
return r
Хотя детали моделей не важны, они могут помочь дать некоторый контекст:
- У меня есть текущий набор вариантов.
- Существует пул потенциальных вариантов, из которых пользователь может выбирать.
- Допускается квота общего выбора. Это число меньше количества возможных вариантов выбора.
Я бы хотел ограничить количество вариантов выбора, которые можно выбрать в пользовательском интерфейсе, чтобы можно было выбрать только определенное количество вариантов выбора n
. и отображаются справа от виджета.
В настоящее время я проверяю это при отправке формы, что я буду продолжать делать, но несколько неуклюже позволить пользователю выбирать слишком много вариантов впервое место.