33 lines
865 B
Python
33 lines
865 B
Python
from django.db import models
|
|
|
|
|
|
class BaseMinMaxField:
|
|
def __init__(self, verbose_name=None, name=None, min=None, max=None,
|
|
**kwargs):
|
|
super().__init__(verbose_name, name, **kwargs)
|
|
self.min_value = min
|
|
self.max_value = max
|
|
|
|
def minmax(self, value):
|
|
return min(self.max_value, max(self.min_value, value))
|
|
|
|
def to_python(self, value):
|
|
return self.minmax(super().to_python(value))
|
|
|
|
def get_prep_value(self, value):
|
|
return super().get_prep_value(self.minmax(value))
|
|
|
|
|
|
class MinMaxField(BaseMinMaxField, models.IntegerField):
|
|
pass
|
|
|
|
class SmallMinMaxField(BaseMinMaxField, models.SmallIntegerField):
|
|
pass
|
|
|
|
class PositiveMinMaxField(BaseMinMaxField, models.PositiveIntegerField):
|
|
pass
|
|
|
|
class PositiveSmallMinMaxField(BaseMinMaxField, models.PositiveSmallIntegerField):
|
|
pass
|
|
|