from django.core.exceptions import ValidationError
from django.forms.fields import MultipleChoiceField
from django.utils.translation import gettext_lazy as _
__title__ = (
"fobi.contrib.plugins.form_elements.fields."
"select_multiple_with_max.fields"
)
__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2014-2019 Artur Barseghyan"
__license__ = "GPL 2.0/LGPL 2.1"
__all__ = ("MultipleChoiceWithMaxField",)
[docs]class MultipleChoiceWithMaxField(MultipleChoiceField):
"""Multiple choice with max field."""
def __init__(
self,
max_choices=None,
choices=(),
required=True,
widget=None,
label=None,
initial=None,
help_text="",
*args,
**kwargs,
):
"""Constructor."""
super(MultipleChoiceWithMaxField, self).__init__(
choices=choices,
required=required,
widget=widget,
label=label,
initial=initial,
help_text=help_text,
*args,
**kwargs,
)
self.max_choices = max_choices
[docs] def validate(self, value):
"""Validate."""
super(MultipleChoiceWithMaxField, self).validate(value)
if self.max_choices:
if len(value) > self.max_choices:
raise ValidationError(
_(
"You must choose no more than {0} "
"values.".format(self.max_choices)
)
)