2023-04-14 10:33:53 -04:00
|
|
|
from django import forms
|
|
|
|
from django.contrib.postgres.forms import SimpleArrayField
|
2023-07-31 23:52:38 +07:00
|
|
|
from django.utils.translation import gettext_lazy as _
|
2023-04-14 10:33:53 -04:00
|
|
|
|
|
|
|
from ..utils import parse_numeric_range
|
|
|
|
|
|
|
|
__all__ = (
|
|
|
|
'NumericArrayField',
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
class NumericArrayField(SimpleArrayField):
|
|
|
|
|
|
|
|
def clean(self, value):
|
|
|
|
if value and not self.to_python(value):
|
2023-07-31 23:52:38 +07:00
|
|
|
raise forms.ValidationError(
|
|
|
|
_("Invalid list ({value}). Must be numeric and ranges must be in ascending order.").format(value=value)
|
|
|
|
)
|
2023-04-14 10:33:53 -04:00
|
|
|
return super().clean(value)
|
|
|
|
|
|
|
|
def to_python(self, value):
|
|
|
|
if not value:
|
|
|
|
return []
|
|
|
|
if isinstance(value, str):
|
|
|
|
value = ','.join([str(n) for n in parse_numeric_range(value)])
|
|
|
|
return super().to_python(value)
|