I’m Just using a simple crispy form using a DurationField which just renders in the form as a text field.
class TimeForm(ModelForm):
setup_duration = forms.DurationField(required=False)
I attempted to build a custom parser such as…
def duration_string(duration):
days = duration.days
seconds = duration.seconds
minutes = seconds // 60
hours = minutes // 60
minutes = minutes % 60
dur_string = f'{hours}:{minutes}:00'
if days:
dur_string = 'f{days} + dur_string'
return dur_string
class CustomDurationField(forms.DurationField):
def prepare_value(self, value):
if isinstance(value, datetime.timedelta):
return duration_string(value)
return value
class TimeForm(ModelForm):
setup_duration = CustomDurationField()
But when a user inputs 1:30 into the form field it still saves in the DB DurationField as minutes:seconds, which I am looking for hours:minutes.
The above user input example of 1:30 would store in my DB as datetime.timedelta(seconds=90), which I need it stored as datetime.timedelta(minutes=90)