I have a Django models with a DurationField. I would like that the users cannot put a value over 00:09:59. Unfortunately I could not find any information to do this in the doc : https://docs.djangoproject.com/en/4.1/ref/models/fields/#durationfield
Asked
Active
Viewed 75 times
0
-
1you can create value validator. checkout [this answer](https://stackoverflow.com/a/12026867/16250404) – Hemal Patel Feb 15 '23 at 10:06
2 Answers
2
You can add validators for that.
It will look something like:
DurationField(
validators=[MaxValueValidator(datetime.timedelta(minutes=10)]
)

Bartosz Stasiak
- 1,415
- 1
- 4
- 9
1
It is not possible with default DurationField
.
You can override the clean_%s
method in the form:
from django import forms
class YourForm(forms.Form):
duration_field = forms.DurationField()
def clean_duration_field(self):
data = self.cleaned_data['duration_field']
if value > timedelta(minutes=9, seconds=59):
raise forms.ValidationError("....", code="invalid")
return data
If you need to do this validation in many places, you can create a custom Field for overriding the validating method of field:
from django import forms
from django.core.validators import validate_email
class RestrictedDurationField(forms.DurationField):
def __init__(self, limit: timdelta, *args, **kwargs):
super().__init__(*args, **kwargs)
self.limit = limit
def validate(self, value):
super().validate(value)
if value > self.limit:
raise forms.ValidationError("....", code="invalid")
# and usage
class form(Form):
duration_field = RestrictedDurationField(limit=timedelta(minutes=9, seconds=59), ...)

Lucas Grugru
- 1,664
- 1
- 4
- 18