Add min_choices validation
This commit is contained in:
parent
c30c4baed7
commit
6c64640978
|
@ -22,7 +22,7 @@ from django.db import models
|
|||
from django.utils.text import capfirst
|
||||
from django.core import exceptions
|
||||
|
||||
from ..forms.fields import MultiSelectFormField, MaxChoicesValidator
|
||||
from ..forms.fields import MultiSelectFormField, MinChoicesValidator, MaxChoicesValidator
|
||||
from ..utils import get_max_length
|
||||
from ..validators import MaxValueMultiFieldValidator
|
||||
|
||||
|
@ -54,6 +54,8 @@ class MultiSelectField(models.CharField):
|
|||
super(MultiSelectField, self).__init__(*args, **kwargs)
|
||||
self.max_length = get_max_length(self.choices, self.max_length)
|
||||
self.validators[0] = MaxValueMultiFieldValidator(self.max_length)
|
||||
if self.min_choices is not None:
|
||||
self.validators.append(MinChoicesValidator(self.min_choices))
|
||||
if self.max_choices is not None:
|
||||
self.validators.append(MaxChoicesValidator(self.max_choices))
|
||||
|
||||
|
|
|
@ -17,13 +17,14 @@
|
|||
from django import forms
|
||||
|
||||
from ..utils import get_max_length
|
||||
from ..validators import MaxValueMultiFieldValidator, MaxChoicesValidator
|
||||
from ..validators import MaxValueMultiFieldValidator, MinChoicesValidator, MaxChoicesValidator
|
||||
|
||||
|
||||
class MultiSelectFormField(forms.MultipleChoiceField):
|
||||
widget = forms.CheckboxSelectMultiple
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.min_choices = kwargs.pop('min_choices', None)
|
||||
self.max_choices = kwargs.pop('max_choices', None)
|
||||
self.max_length = kwargs.pop('max_length', None)
|
||||
super(MultiSelectFormField, self).__init__(*args, **kwargs)
|
||||
|
@ -31,3 +32,5 @@ class MultiSelectFormField(forms.MultipleChoiceField):
|
|||
self.validators.append(MaxValueMultiFieldValidator(self.max_length))
|
||||
if self.max_choices is not None:
|
||||
self.validators.append(MaxChoicesValidator(self.max_choices))
|
||||
if self.min_choices is not None:
|
||||
self.validators.append(MinChoicesValidator(self.min_choices))
|
||||
|
|
|
@ -24,6 +24,10 @@ class MaxValueMultiFieldValidator(validators.MaxLengthValidator):
|
|||
code = 'max_multifield_value'
|
||||
|
||||
|
||||
class MinChoicesValidator(validators.MinLengthValidator):
|
||||
message = _(u'You must select a minimum of %(limit_value)d choices.')
|
||||
code = 'min_choices'
|
||||
|
||||
class MaxChoicesValidator(validators.MaxLengthValidator):
|
||||
message = _(u'You must select a maximum of %(limit_value)d choices.')
|
||||
code = 'max_choices'
|
||||
|
|
Loading…
Reference in a new issue