-
Notifications
You must be signed in to change notification settings - Fork 14
/
fields.py
25 lines (19 loc) · 970 Bytes
/
fields.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
class LimitedMultipleChoiceField(forms.MultipleChoiceField):
def __init__(self, *args, **kwargs):
self.maximum_choices = kwargs.pop("maximum_choices")
self.default_error_messages.update({
'maximum_choices': _('You may select at most %(maximum)d choices (%(selected)d selected)')
})
super(LimitedMultipleChoiceField, self).__init__(*args, **kwargs)
def validate(self, value):
super(LimitedMultipleChoiceField, self).validate(value)
selected_count = len(value)
if self.maximum_choices and selected_count > self.maximum_choices:
raise ValidationError(
self.error_messages['maximum_choices'],
code='maximum_choices',
params={'maximum': self.maximum_choices, 'selected': selected_count},
)